直接将CSV文件的列读入变量名的Python方法
我想把一个CSV文件的列直接读入变量中。结果应该像下面这个命令行的效果: while IFS=, read ColumnName1 ColumnName2 ColumnName3 do stuff
到目前为止,答案似乎是用csv.DictReader,但我还没能让它正常工作。我没有表头行,所以列名得手动创建。(我想用字典的形式,比如 mydictionary={ 'ColumnName1':0, 'ColumnName2':1, 'ColumnName3':3 })
另外,列能不能像简单的变量名那样引用,还是必须用列表[index]的方式来引用?如果能给个代码示例,直接按名称打印列就好了。谢谢你的帮助。
6 个回答
2
这是你想要的内容吗(Python 3.X):
import csv
from io import StringIO
# Simulate a csv data file with no header
data = StringIO('''\
Mark,44,1
Joe,22,0
Craig,39,3
''')
for row in csv.DictReader(data,'Name Age Children'.split()):
print(row)
输出结果
{'Age': '44', 'Name': 'Mark', 'Children': '1'}
{'Age': '22', 'Name': 'Joe', 'Children': '0'}
{'Age': '39', 'Name': 'Craig', 'Children': '3'}
或者也许是:
import csv
from io import StringIO
# Simulate a csv data file with no header
data = StringIO('''\
Mark,44,1
Joe,22,0
Craig,39,3
''')
# 1. Read in all the data
# 2. Transpose into columns
# 3. Match with column names
# 4. Create dictionary
cols = dict(zip('Name Age Children'.split(),zip(*csv.reader(data))))
print(cols)
输出结果
{'Age': ('44', '22', '39'), 'Name': ('Mark', 'Joe', 'Craig'), 'Children': ('1', '0', '3')}
3
for row in thingthatyieldslists:
col1, col2, col3 = row
print "%s: %s, %s" % (col1, col2, col3)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
7
内置的CSV模块在处理csv文件时非常有用。
哦,没关系,如果你在看DictReader,那你肯定已经在使用它了。
我通常处理没有表头的文件的方法是先读取第一行,看看里面有多少个逗号(这样就能知道有多少列),然后根据列的数量在我的代码中设置一个字典或列表来存放csv文件里的值。我可以提供一个例子,如果需要的话,这个过程其实很简单。
我想我更明白你的问题了,这样的内容是不是更符合你的需求?
mydictionary={ 'ColumnName1':[dataRow1Col1, dataRow2Col1, dataRow3Col1],
'ColumnName2':[dataRow1Col2, dataRow2Col2, dataRow3Col2],
'ColumnName3':[dataRow1Col3, dataRow2Col3, dataRow3Col3] }
在这种情况下,像这样的代码可能会有效:
import csv
Col1 = "ColumnName1"
Col2 = "ColumnName2"
Col3 = "ColumnName3"
mydictionary={Col1:[], Col2:[], Col3:[]}
csvFile = csv.reader(open("myfile.csv", "rb"))
for row in csvFile:
mydictionary[Col1].append(row[0])
mydictionary[Col2].append(row[1])
mydictionary[Col3].append(row[2])