Python словарь файлов - как? - PullRequest
0 голосов
/ 07 марта 2011

Мне нужно открыть несколько новых CSV-файлов на лету, в зависимости от того, какие данные содержит инфил. Эти CSV-файлы должны иметь имена файлов на основе этих данных, чтобы их нельзя было жестко закодировать.

Я пытаюсь создать словарь {имя_файла, FILENAME.CSV}, и у меня возникают проблемы со строками ниже:

    if not os.path.exists(filename):
        files_dict[filename] = open(filename,'w')
    files_dict[filename].write('Test')

Оператор if работает нормально - он с радостью пройдет через infile, создав все необходимые файлы csv.

Хотя ему не нравится оператор write:

Traceback (most recent call last):
  File "R:\DataTeam\Orange\Landline\Fixed\Websource_Landline_FixedData_SplitIntoAccounts_20110307.py", line 141, in <module>
    files_dict[filename].write('Test')
KeyError: 'OBS Fixed 6-65544 - BRICO DEPOT 201005.csv'

Любые идеи о том, как записать в эти файлы, которые были успешно созданы? Или есть гораздо более простой способ сделать это?

Спасибо

Tony

1 Ответ

6 голосов
/ 07 марта 2011

Проблема заключается в том, что, если файл уже существует, вы не открываете файл или не назначаете имя файла в качестве ключа в dict, следовательно, исключение KeyError.

Попробуйте вместо этого:

# open file if not yet open
files_dict.setdefault(filename, open(filename,'w')) 
files_dict[filename].write("test")

Это открывает файл в режиме записи, если имя файла еще не существует в dict, и сохраняет обработчик в dict с именем файла в качестве ключа.Обратите внимание, что файлы, которые уже существуют , но еще не назначены для dict, будут перезаписаны.

Если вы выполняете только одну запись, вы можете объединить строки, так как setdefault будетвернуть значение, назначенное клавише.

files_dict.setdefault(filename, open(filename,'w')).write("test")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...