取决于一天结束时要使用列表的方式,您还可以将csv模块用于某些事情,这对于不止一个条目可能会出现多个列的情况将更为灵活.
import csv
with open(file, 'r') as f:
reader = csv.reader(f, delimiter='')
header = next(reader)
list = [[x if x else 'n/a' for x in line] for line in reader]
现在,列表将是一个列表列表,每个列表都包含实际项目.
In [11]: print(header)
['id', 'value1', 'value2', 'value3']
In [12]: print(list)
[['1', 'hello', 'world', 'something'], ['2', 'n/a', 'goodnight', 'world']]
在以下评论之后添加了Edit:
对上述方法稍加修改(使用Python 2.7词典理解)将使您获得词典;
import csv
with open(file, 'r') as f:
reader = csv.reader(f, delimiter='')
header = next(reader)
list = [{header[i]: line[i] if line[i] else 'n/a' for i in range(len(header))} for line in reader]
print(list)
# [{'value1': 'hello', 'value3': 'something', 'id': '1', 'value2': 'world'}, {'value1': 'n/a', 'value3': 'world', 'id': '2', 'value2': 'goodnight'}]
您问这是否更干净,这可能在很大程度上取决于您打算如何使用该结果.如果您决定检查结果,则词典方法为您提供了易于阅读的内容.
如果您处于需要对文件执行大量数据处理的情况,则可能会对为这种东西制作的pandas DataFrame数据结构感兴趣.但是,如果您不在那种情况下,那么这种方法可能会完全被淘汰.有关其功能的几个简单示例(例如,请注意,默认情况下它会解决您原来的“ n / a”问题):
In [1]: import pandas as pd
In [5]: df = pd.read_csv('testfile', delimiter='') # Or whatever your file is called
In [6]: df = df.set_index('id')
In [7]: df
Out[7]:
value1 value2 value3
id
1 hello world something
2 NaN goodnight world
In [8]: df[df['value3'] == 'something'] # Find all rows with a given value3
Out[8]:
value1 value2 value3
id
1 hello world something
In [10]: df[df['value2'] == 'goodnight'] # Find all rows with a given value2
Out[10]:
value1 value2 value3
id
2 NaN goodnight world
In [11]: df['value1'] # Show only value1
Out[11]:
id
1 hello
2 NaN
Name: value1, dtype: object
基本上,您可以在桌面上进行的任何操作在大熊猫中都是很自然的做法.