Открытие файлов из os.listdir () и сравнение строк внутри?

Хорошо, поэтому я пишу программу, которая поможет подключиться к беспроводным сетям. У меня большая часть его (на самом деле, она полная. Я просто работаю над дополнительными функциями.)

Я пишу интерфейс GUI для брандмауэра беспроводного сетевого подключения под названием NetCTL для операционной системы Arch Linux. В принципе, люди могут вручную создавать профили и называть их независимо от того, что они хотят (т. Е. «Asdfasdfasdf»), но мои будут ВСЕГДА генерировать $ NetworkSSID_wifiz.

Тем не менее, каждый файл будет иметь одну строку в нем, которая сможет определить, является ли она для той же сети.

Линия:

ESSID='$NetworkSSID' 

Итак, как мне открыть каждый файл, который появляется в os.listdir, и проверить, имеют ли эти два файла одну и ту же строку (хотя и не слишком много накладных расходов).

Все профили сохраняются в / etc / netctl независимо от того, сгенерированы ли они моей программой или пользователем.

Примеры файлов:

Пользователь создал:

 Description='A simple WPA encrypted wireless connection' Interface=wlp2s0 Connection=wireless Security=wpa IP=dhcp ESSID='MomAndKids' # Prepend hexadecimal keys with \" # If your key starts with ", write it as '""<key>"' # See also: the section on special quoting rules in netctl.profile(5) Key='########' # Uncomment this if your ssid is hidden #Hidden=yes к Description='A simple WPA encrypted wireless connection' Interface=wlp2s0 Connection=wireless Security=wpa IP=dhcp ESSID='MomAndKids' # Prepend hexadecimal keys with \" # If your key starts with ", write it as '""<key>"' # See also: the section on special quoting rules in netctl.profile(5) Key='########' # Uncomment this if your ssid is hidden #Hidden=yes 

Создано моей программой:

 Description='A profile generated by WiFiz for MomAndKids' Interface=wlp2s0 Connection=wireless Security=wpa ESSID='MomAndKids' Key='#######' IP=dhcp к Description='A profile generated by WiFiz for MomAndKids' Interface=wlp2s0 Connection=wireless Security=wpa ESSID='MomAndKids' Key='#######' IP=dhcp 

Пример вывода os.listdir:

 ['hooks', 'interfaces', 'examples', 'ddwrt', 'MomAndKids_wifiz', 'backups', 'MomAndKids'] 

2 Solutions collect form web for “Открытие файлов из os.listdir () и сравнение строк внутри?”

Это должно сработать для вас:

 from glob import glob from os import path config_dir = '/etc/netctl' profiles = dict((i, {'full_path': v, 'ESSID': None, 'matches': []}) for (i, v) in enumerate(glob(config_dir + '/*')) if path.isfile(v)) for K, V in profiles.items(): with open(V['full_path']) as f: for line in f: if line.startswith('ESSID'): V['ESSID'] = line.split('=',1)[1].strip() break # no need to keep reading. for k, v in profiles.items(): if K == k or k in V['matches'] or not v['ESSID']: continue if V['ESSID'] == v['ESSID']: V['matches'].append(k) v['matches'].append(K) for k, v in profiles.items(): print k, v с from glob import glob from os import path config_dir = '/etc/netctl' profiles = dict((i, {'full_path': v, 'ESSID': None, 'matches': []}) for (i, v) in enumerate(glob(config_dir + '/*')) if path.isfile(v)) for K, V in profiles.items(): with open(V['full_path']) as f: for line in f: if line.startswith('ESSID'): V['ESSID'] = line.split('=',1)[1].strip() break # no need to keep reading. for k, v in profiles.items(): if K == k or k in V['matches'] or not v['ESSID']: continue if V['ESSID'] == v['ESSID']: V['matches'].append(k) v['matches'].append(K) for k, v in profiles.items(): print k, v с from glob import glob from os import path config_dir = '/etc/netctl' profiles = dict((i, {'full_path': v, 'ESSID': None, 'matches': []}) for (i, v) in enumerate(glob(config_dir + '/*')) if path.isfile(v)) for K, V in profiles.items(): with open(V['full_path']) as f: for line in f: if line.startswith('ESSID'): V['ESSID'] = line.split('=',1)[1].strip() break # no need to keep reading. for k, v in profiles.items(): if K == k or k in V['matches'] or not v['ESSID']: continue if V['ESSID'] == v['ESSID']: V['matches'].append(k) v['matches'].append(K) for k, v in profiles.items(): print k, v 
 import os all_essid = [] for file in os.listdir('.'): if not os.path.isfile(file): break with open(file) as fo: file_lines = fo.readlines() for line in file_lines: if line.startswith('ESSID') if line in all_essid: print 'duplicate essid %s' % line all_essid.append(line) 

Или вы можете попробовать os.walk если хотите спуститься в каталоги;

  for root, dirs, files in os.walk("."): for file in files: # etc. 
  • На каких системах / файловых системах есть os.open () atomic?
  • Определить комбинацию клавиш в Linux с помощью Python?
  • Проверка запуска скрипта python в скрипте python
  • Ошибка при установке Python
  • numpy undefined symbol: PyFPE_jbuf
  • Отсутствует GOMP_parallel или GOMP_4.0 в (Docker) jupyter / all-spark-notebook: как R, так и Python
  • Настройка Unix Socket с Nginx и Django
  • Чтение содержимого pdf-файла
  • Python - лучший язык программирования в мире.