【发布时间】:2013-04-17 05:43:32
【问题描述】:
我的 csv 文件分布在多个目录中,每个 csv 文件只有一列包含数据。我想要做的是读取所有这些文件并将每个文件的列放入 csv 文件中。最终的 csv 文件将以文件名作为其标题的列,并将其原始文件中的相应数据作为其列数据。
这是我在~/csv_files/ ls里面的目录结构
ab arc bat-smg bn cdo crh diq es fo gd haw ia iu ki ksh lez lv mo na no os pih rmy sah simple ss tet tr ur war zea
ace arz bcl bo ce cs dsb et fr gl he id ja kk ku lg map-bms mr nah nov pa pl rn sc sk st tg ts uz wo zh
af as
每个目录都有两个 csv 文件,我想使用 os.walk() 函数,但我认为我对 os.walk 的理解是不正确的,这就是为什么我目前没有产生任何东西的原因。
import sys, os
import csv
root_path = os.path.expanduser(
'~/data/missing_files')
def combine_csv_files(path):
for root, dirs, files in os.walk(path):
for dir in dirs:
for name in files:
if name.endswith(".csv"):
csv_path = os.path.expanduser(root_path + name)
if os.path.exists(csv_path):
try:
with open(csv_path, 'rb') as f:
t = f.read().splitlines()
print t
except IOError, e:
print e
def main():
combine_csv_files(root_path)
if __name__=="__main__":
main()
我的问题是:
- 我在这里做错了什么?
- 我能否从另一个文件中读取一个 csv 列并将该数据作为一个列添加到另一个文件中,因为 csv 文件更依赖于行,并且行之间没有依赖关系。
最后我试图得到这样的 csv 文件,(这里是潜在的标题)
ab_csv_data_file1, ab_csv_data_file2, arc_csv_data_file1, arc_csv_data_file2
【问题讨论】:
-
将
print csv_path添加到最里面的for循环以确保路径符合您的预期 -
你误用了 os.walk()