Вы не очень понимаете, какие форматы файлов вы используете, или что вам нужно делать с записями, когда вы их читаете. Но принимая некоторые форматы файлов от ваш другой вопрос о чтении файлов CSV Я приведу пример программы для работы.
Вот мастер-файл m.csv.txt
.Это файл с разделителями-запятыми (CSV), и первое поле - это идентификатор.
AAC,D,20111207,9.83,9.83,9.83,9.83,100
AACC,D,20111207,3.46,3.47,3.4,3.4,13400
AACOW,D,20111207,0.3,0.3,0.3,0.3,500
AAME,D,20111207,1.99,1.99,1.95,1.99,8600
AAON,D,20111207,21.62,21.9,21.32,21.49,93200
AAPL,D,20111207,389.93,390.94,386.76,389.09,10892800
Вот файл ежедневного обновления d.csv.txt
.Он имеет такой же формат.Опять же, первое поле - это идентификатор.Если идентификатор совпадает с идентификатором из основного файла, записи должны быть объединены.В противном случае новые идентификаторы в ежедневном файле добавляются в общий список.
AACC,D,20120127,4.01,4.02,4.03,4.04,40000
B,D,20120127,4.01,4.02,4.03,4.04,40000
Вот простая программа для чтения в мастер-файле с использованием модуля csv
ипоместите запись для каждой строки в словарь stocks
.Первое поле используется в качестве ключа для словаря.Это очень простая структура данных, но вы сказали, что главный файл может быть в любом формате данных.Затем мы распечатываем словарь stocks
.
import csv
mainReader = csv.DictReader( open("m.csv.txt","rb"), ["id"],"others")
newReader = csv.DictReader( open("d.csv.txt","rb"), ["id"],"others")
stocks = {}
for line in mainReader:
stocks[line['id']] = line
print stocks # output hand-formatted
{
'AAC': {'id':'AAC',
'others': ['D','20111207','9.83','9.83','9.83','9.83','100']},
'AACC': {'id':'AACC',
'others': ['D', '20111207', '3.46', '3.47', '3.4', '3.4', '13400']},
'AAME': {'id': 'AAME',
'others': ['D', '20111207', '1.99', '1.99', '1.95', '1.99', '8600']},
'AACOW': {'id': 'AACOW',
'others': ['D', '20111207', '0.3', '0.3', '0.3', '0.3', '500']},
'AAPL': {'id': 'AAPL', 'others':
['D','20111207','389.93','390.94','386.76','389.09','10892800']},
'AAON': {'id': 'AAON',
'others': ['D', '20111207', '21.62', '21.9', '21.32', '21.49', '93200']}
}
Теперь программа продолжает чтение в файле ежедневного обновления, снова используя модуль csv.Вы не знаете, как объединить запись с записью из основного файла, если они имеют одинаковый идентификатор.Для этого примера я просто позволю записи из ежедневного файла полностью заменить существующую запись.Когда мы распечатаем получившиеся stocks
.
for line in newReader:
# can use if line['id'] in stocks: to check for an existing record if desired
# in this example, we blindly overwrite any existing entry
stocks[line['id']] = line
print stocks # output hand-formatted
{
'AAME': {'id': 'AAME',
'others': ['D', '20111207', '1.99', '1.99', '1.95', '1.99', '8600']},
'B': {'id': 'B',
'others': ['D', '20120127', '4.01', '4.02', '4.03', '4.04', '40000']},
'AACC': {'id': 'AACC',
'others': ['D', '20120127', '4.01', '4.02', '4.03', '4.04', '40000']},
'AAPL': {'id': 'AAPL',
'others': ['D','20111207','389.93','390.94','386.76','389.09','10892800']},
'AAON': {'id': 'AAON',
'others': ['D', '20111207', '21.62', '21.9', '21.32', '21.49', '93200']},
'AACOW': {'id': 'AACOW',
'others': ['D', '20111207', '0.3', '0.3', '0.3', '0.3', '500']}
}
Обратите внимание, что структура данных словаря не имеет определенного порядка при печати.Вы хотите отсортированный вывод?Используйте метод items()
для словарей, чтобы получить список, и .sort()
, чтобы отсортировать список.(Есть много других способов сделать это.)
s = stocks.items()
s.sort()
print s # output hand-formatted
[
'AACC': {'id': 'AACC',
'others': ['D', '20120127', '4.01', '4.02', '4.03', '4.04', '40000']},
'AACOW': {'id': 'AACOW',
'others': ['D', '20111207', '0.3', '0.3', '0.3', '0.3', '500']},
'AAME': {'id': 'AAME',
'others': ['D', '20111207', '1.99', '1.99', '1.95', '1.99', '8600']},
'AAON': {'id': 'AAON',
'others': ['D', '20111207', '21.62', '21.9', '21.32', '21.49', '93200']},
'AAPL': {'id': 'AAPL',
'others': ['D','20111207','389.93','390.94','386.76','389.09','10892800']},
'B': {'id': 'B',
'others': ['D', '20120127', '4.01', '4.02', '4.03', '4.04', '40000']}
]
Вы хотите записать обновленный мастер-файл.Используйте csv.DictWriter()
или csv.writer()
.Вы можете сделать это построчно или вывести полный список в памяти, например, stocks
сразу.