我在目录中有很多.csv文件,我想在Python中的循环中打开它们,这样第一个.csv被读入列表[0],第二个.csv被读入列表[1] ] 等等.
不幸的是,当我的代码循环遍历所有.csv文件时,它将所有.csv文件放入list [0].如何修改我的代码以便我可以实现上述目标?非常感谢.
约翰
这是代码:
def create_data_lists():
i=0
for symbol in symbols:
with open(symbols[i]+'.csv', 'r') as f:
print i
reader = csv.reader(f)
reader.next()
for row in reader:
rowdata.append(row)
data_by_symbol.append(rowdata)
i=i+1
Run Code Online (Sandbox Code Playgroud)
yos*_*bai 10
在for循环内,靠近顶部,你必须刷新列表rowdata.否则你将永远添加到那个.有一些像rowdata = []右后print i
def create_data_lists():
for symbol in symbols:
with open(symbol+'.csv', 'r') as f:
print symbol
rowdata = []
reader = csv.reader(f)
reader.next()
for row in reader:
rowdata.append(row)
data_by_symbol.append(rowdata)
Run Code Online (Sandbox Code Playgroud)
编辑摆脱了i,因为我真的没有使用它
为什么不将读者自己存放在列表中?
list_of_csv_files = []
for f in filenames:
list_of_csv_files.append(csv.DictReader(open(f)))
Run Code Online (Sandbox Code Playgroud)
这会将阅读器本身存储在列表中,以便您稍后执行以下操作:
for row in list_of_csv_files[0]:
# do some processing on the row
Run Code Online (Sandbox Code Playgroud)
这种方法的最大优点是,您可以使用以下方法轻松完成过滤列之类的操作:
one_row = [row["name of column heading"] for row in list_of_csv_files[0]]
two_rows = [[row["name col 2"], row["name col 2"]] for row in list_of_csv_files[0]]
Run Code Online (Sandbox Code Playgroud)
我怀疑这对你的程序比存储预读(和解析结构)的csv文件更有帮助.
但是如果你真的想要读入并存储在列表中的所有CSV文件,你需要一个列表列表,我不建议这样做,它将是非常耗费内存的:
list_of_csv_files = [[]]
for f in filenames:
list_of_csv_files.append([row.values() for row in csv.DictReader(open(f))])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23583 次 |
| 最近记录: |