我正在处理CSV文件并将处理后的数据放入文本文件中。 进入文本文件的整个数据是一个大表(逗号分隔而不是空格)。我的问题是如何记住文本文件中的一段数据所在的列?
例如。假设有一个名为'col'的列。 我只是在col下面放了一些数据。现在经过几次迭代后,我想再将一些其他数据放在col下(在另一行中)。我怎么知道col到底在哪里? (并且有很多这样的专栏。)
希望我不是太模糊......
答案 0 :(得分:2)
使用列表列表。那就是:
[[col1, col2, col3, col4], # Row 1
[col1, col2, col3, col4], # Row 2
[col1, col2, col3, col4], # Row 3
[col1, col2, col3, col4]] # Row 4
要修改特定列,您可以使用单个语句将其转换为列列表:
>>> cols = zip(*rows)
>>> cols
[[row1, row2, row3, row4], # Col 1
[row1, row2, row3, row4], # Col 2
[row1, row2, row3, row4], # Col 3
[row1, row2, row3, row4]] # Col 4
答案 1 :(得分:1)
Python的CSV库有function named DictReader,允许您以Python字典的形式查看和操作数据,这允许您使用常规的迭代工具。
答案 2 :(得分:1)
SQLite是您的选择吗?我知道你有CSV输入和输出。但是,您可以将所有数据导入SQLite数据库。然后使用SQL的强大功能完成所有必要的处理。然后,您可以将结果导出为CSV。
答案 3 :(得分:0)
可能是dict
list
或list
dict
。就个人而言,我会选择前者。因此,解析CSV的标题行以从列标题到列索引获得dict
。然后,当您浏览每一行时,找出您所在的索引,获取列标题,然后追加到该列标题的列表末尾。
答案 4 :(得分:0)
好问题,我经常遇到这个问题。
一般来说,为了处理这样的csv文件,我更喜欢使用R,它是专门为此设计的data.frame对象。
在python中,你可以看看这个名为datamatrix的库:
或者可能是numpy / scipy的矩阵。
命名元组是解析csv文件的另一种选择,但它们不是基于矩阵的概念:
答案 5 :(得分:0)
您的情况有点模糊,但我会尝试回答您的问题,“我如何记住文本文件中的数据所在的列?”
一种方法是将行列表存储为字典。
注意:我通常使用制表符分隔的文本文件,如果我忘记了有关csv格式的内容,请原谅我。
input_file = open('input.csv', 'r')
# ['col1', 'col2', 'col3']
headers = input_file.readline().strip().split(',')
stored_rows = []
for line in input_file:
row_data = line.strip().split(',')
stored_rows.append(dict(zip(headers, row_data)))
现在每一行都有一个值,然后您可以按照您需要的顺序处理和输出。
output_headers = ['col3', 'col1', 'col2']
output_file = open('ouput.csv', 'w')
output_file.write(','.join(output_headers) + '\n')
for row in stored_rows:
# do any processing you need here
row['col1'] = row['col1'].strip().lower() #for example
# write the data to your output file in the order you want it
output_file.write(','.join(map(row.get, output_headers)) + '\n')