Тип значения вашего словаря может быть списком или другим классом, который содержит несколько объектов. Что-то вроде
Dictionary<int, List<string>>
для словаря, который вводится с помощью int и содержит список строк.
Основное внимание при выборе типа значения - это то, что вы будете использовать Словарь для, если вам придется выполнять поиск или другие операции над значениями, тогда, возможно, подумайте об использовании структуры данных, которая поможет вам делать то, что вы хотите - как HashSet.
Если вы не хотите закрывать и снова открывать файл, чтобы избежать состояния гонки, вы можете усечь
его:
f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
f.close()
Функциональность также может быть чище и безопаснее , используя с open as
на комментарий mVChr, который закроет обработчик, даже если произойдет ошибка.
with open(filename, 'r+') as f:
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
Модуль fileinput
имеет встроенный
режим для записи изменений в файл, который вы обрабатываете, без использования временных файлов. и т. д. Модуль прекрасно инкапсулирует обычную операцию перебора строк в списке файлов с помощью объекта, который прозрачно отслеживает имя файла, номер строки и т. д., если вы хотите проверить их внутри цикла.
import fileinput
for line in fileinput.FileInput("file",inplace=1):
if "foobar" in line:
line=line.replace("foobar","bar")
print line
Возможно, было бы проще и аккуратнее закрыть файл после text = re.sub('foobar', 'bar', text)
, снова открыть его для записи (очистив старое содержимое) и записать в него обновленный текст.