如何在Python中合并200个CSV文件?
如何在Python中合并200个CSV文件?
问题出现的原因:有大量的CSV文件需要合并,传统的合并方法耗时且占用大量内存。
解决方法:使用pandas库来合并CSV文件。
首先,我们可以使用Stack Overflow中的答案来创建一个包含要合并的CSV文件的列表,然后运行以下代码:
import pandas as pd combined_csv = pd.concat( [ pd.read_csv(f) for f in filenames ] )
如果你想要将合并后的数据导出到一个单独的CSV文件中,可以使用以下代码:
combined_csv.to_csv("combined_csv.csv", index=False)
这样就可以将合并后的数据保存到"combined_csv.csv"文件中。
需要注意的是,假设所有的文件都有每行的标题 - 一些行具有不同的标题。每个文件中的2列没有标题。如何合并这些文件,使得每个文件只添加一列。
为了保持合并后的数据的顺序,可以添加`sort=False`参数:
combined_csv = pd.concat( [pd.read_csv(f) for f in filenames ], sort=False)
如果有成千上万个CSV文件,这种方法可能会花费很长时间且占用大量内存。
在Python中合并200个CSV文件的方法是这样的:使用sed 1d sh*.csv > merged.csv
命令。这种方法适用于Windows系统,可以使用copy *.csv merged.csv
命令。如果要删除每个文件的标题信息,可以使用for f in mydir; do sed 1d $f >> merged.csv; done
命令。但是这种方法会导致合并的文件中重复出现标题信息。
有用户提到了一个问题,就是如何在不复制每个文件的标题信息的情况下使用这个命令。还有用户提到,他不小心使用了sed 1d *.csv > merged.csv
命令,在电脑崩溃之前运行了一段时间,因为存储空间不足。另一个用户提到,他使用sed 1d *.csv >> merged_file.csv
命令时,显示了索引,导致合并后的文件大小为130MB,而以另一种方式合并10个CSV文件时,大小只有14.5MB,并且有时会导致存储空间不足。他的问题是如何消除索引。
合并200个CSV文件的方法是使用sed 1d sh*.csv > merged.csv
命令,但会导致合并的文件中重复出现标题信息。如果要删除每个文件的标题信息,可以使用for f in mydir; do sed 1d $f >> merged.csv; done
命令。对于出现的问题,可以尝试不复制每个文件的标题信息,或者寻找其他方法消除索引。
问题的出现原因:
用户想要在Python中合并200个CSV文件,但是在尝试使用f.next()
方法时遇到了错误,提示'_io.TextIOWrapper' object has no attribute 'next'
。
解决方法:
根据用户提供的代码,可以通过以下步骤解决该问题:
1. 使用with open
语法打开输出文件out.csv
,并将其命名为fout
。
2. 先处理第一个文件sh1.csv
,使用with open
语法打开该文件,并将其命名为f
。使用fout.writelines(f)
将文件内容写入输出文件out.csv
。
3. 处理剩下的199个文件。使用循环遍历文件编号num
从2到200,打开对应的文件sh + str(num) + .csv
,并将其命名为f
。使用next(f)
跳过文件的头部(header),然后使用fout.writelines(f)
将文件内容写入输出文件out.csv
。
此外,用户提到在Python 3中,可以使用f.__next__()
替代f.next()
。并且使用with open
语法可以避免手动关闭文件。
另外一个用户提到在fout.write(line)
之前,可以添加一行代码if line[-1] != '\n': line += '\n'
,用于确保每行数据都以换行符结尾。
还有一个用户解释了f.next()
和f.__next__()
之间的区别,他解释说Python 3中将迭代器的特殊方法名从.next
修改为.__next__
,这是为了避免与用户代码中的其他用途冲突。他建议使用next(f)
来调用迭代器的顶层函数,这样可以保证代码在所有Python版本中都能正常工作。
最后,用户互相致谢并表达了对解释的感谢,并表示很高兴在2022年能够在这里相遇。