Открытие файлов из 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. 
  • Ошибка установки модуля Python: сбой команды «gcc» с статусом выхода 1
  • Python прочитал имя PIPE
  • python -c и `while`
  • Почему Linux может принимать сокеты в многопроцессорности?
  • Firefox с селеном (без головы)
  • Разница в буферизации stdout в Linux и Windows
  • Как получить значения RGB QPixmap или QImage pixel - Qt, PyQt
  • Как открыть файл со стандартным приложением?
  •  
    Interesting Posts for Van-Lav

    Python: требуется kwarg, какое исключение для рейза?

    Настройка setup.py для упаковки одного .py-файла и одного файла данных без необходимости создания каких-либо папок

    ModelViewSet – обновление вложенного поля

    Python Pandas: как я могу найти строку в столбце?

    нарисовать границу вокруг подзаголовков в matplotlib

    Как добавить местозаполнитель в Tkinter

    Pycurl и io.StringIO – pycurl.error: (23, 'Failed writing body)

    Как освободить типизированный массив numpy? Устанавливает ли callback_free_data жизнеспособный вариант?

    Как вы можете нарезать строковыми клавишами вместо целых чисел на python OrderedDict?

    Целочисленный размер шага в scipy оптимизирует минимизацию

    ошибка с добавлением к файлу и использование массива

    Есть ли способ добавить к существующему bpath в gnome canvas в Python?

    Отображение числа 1D массивов в 2D-массив

    Python, как уменьшить в списке кортежей?

    IOError: недопустимый режим ('r') или имя файла: 'c: \\ Python27 \ test.txt'

    Python - лучший язык программирования в мире.