У меня есть две проблемы:Python 3 - Чтение CSV файл с преобразованием типа
а) модуль Python CSV не может обрабатывать конкретный CSV файл правильно
У меня есть следующие данные в database.csv
"AAAAAAAA" , 5.4817, 0.0000, 0.0000, 0.0000, 65.8370
"n,m-BBBBBBBBB" , 1.7897, 675.3787, 1234.7865, 47.0000, 42.0070
Обратите внимание, что между двойной кавычкой и запятой есть пробелы. Я использовал следующий сценарий для чтения файла, первый столбец будет декодироваться как "AAAAAAAA "
, вместо "AAAAAAAA"
import csv
def read_csv_data(path):
with open(path, 'rU') as f:
f_csv = csv.reader(f)
for row in f_csv:
yield row
for row in read_csv_data('database.csv'):
print(row)
Выход
['AAAAAAAA ', ' 5.4817', ' 0.0000', ' 0.0000', ' 0.0000', ' 65.8370']
['n,m-BBBBBBBBB ', ' 1.7897', ' 675.3787', ' 1234.7865', ' 47.0000', ' 42.0070']
Чтобы удалить пробельные, я делаю это
import csv
def read_csv_data(path):
col_type = [str, float, float, float, float, float]
with open(path, 'rU') as f:
f_csv = csv.reader(f)
for row in f_csv:
row = tuple(cast(val.strip()) for cast, val in zip(col_type, row))
yield row
for row in read_csv_data('database.csv'):
print(row)
Выходной сигнал
('AAAAAAAA', 5.4817, 0.0, 0.0, 0.0, 65.8370)
('n,m-BBBBBBBBB', 1.7897, 675.3787, 1234.7865, 47.0, 42.007)
б) Использование namedtuple для чтения в данных CSV в память
С тем же CSV файл database.csv
, я использую другой сценарий:
import csv
from collections import namedtuple
def read_csv_data(path):
col_type = [str, float, float, float, float, float]
Gas = namedtuple("Gas", ["gas", "sf", "h1", "h2", "h3", "m"])
with open(path, 'rU') as f:
f_csv = csv.reader(f)
for row in f_csv:
row = list(cast(val.strip()) for cast, val in zip(col_type, row))
for row2 in map(Gas._make, row):
yield row2
for row in read_csv_data('database.csv'):
print(row)
Ошибка является
Traceback (most recent call last):
File "read_dict.py", line 17, in <module>
for row in read_csv_data('database.csv'):
File "read_dict.py", line 13, in read_csv_data
for row2 in map(Gas._make, row):
File "<string>", line 21, in _make
TypeError: Expected 6 arguments, got 8
Это здорово !. Спасибо. – yoonghm
Для проблемы а), я чувствую, что модуль csv не обрабатывает этот вид csv-файла. Я попробовал 'quoting = csv.QUOTE_NONNUMERIC' и' skipinitialspace = True'. – yoonghm
Я импортирую файл csv 'database.csv' в Microsoft Excel, включая конечные пробелы. Это означало бы, что он считается действительным CSV-файлом. – yoonghm