Чтение в CSV-файл для добавления данных в словарь или кортеж - PullRequest
0 голосов
/ 22 января 2012

Я новичок в Python.Мне нужно переписать мою программу выбора акций и мне нужна помощь для начала работы.

Первый модуль - это программа создания основных данных.Он считывает файл данных запаса CSV EOD (конец дня).

Затем он анализирует главный файл, добавляя информацию о запасах за эти дни в массив (из 35 элементов).

Каждый массив имеет 5 столбцов, содержащих информацию EOD.

Оригинальная программа была проиндексирована на биржевом названии.Индексация не важна, так как основной файл доступен только последовательно во второй основной основной программе.Что необходимо, так это имя акции, которое будет использоваться в качестве заголовка для записей (в массиве) в главном файле.

Необходим способ открыть и прочитать файл CSV.Сравнивая каждое название акции if stka == stkb, обновите информацию в main.idx.

Псевдокод:

    Open-r CVS
    Open-rwb main
    While (cvs)
            Readline(CVS)
            Readline (main)
      If cvs == main
            Add to record
            Wright (main)
      else
      If cvs > main
            Readline (main)
      else
      If cvs < main
            Readline (cvs)

Вот некоторый код, который обрабатывает программу CSV, и моя попытка находится в разделе Обновление файлов CSV автоматически .

Мои потребности проще в том, что мне нужно только прочитать в файле CSV.Главный файл может находиться в любом наборе данных Python list, dictionary или tuple.

Спасибо за любую помощь, указав мне в правильном направлении.

1 Ответ

1 голос
/ 28 января 2012

Вы не очень понимаете, какие форматы файлов вы используете, или что вам нужно делать с записями, когда вы их читаете. Но принимая некоторые форматы файлов от ваш другой вопрос о чтении файлов 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 сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...