【发布时间】:2021-04-01 14:10:07
【问题描述】:
我正在尝试在 Python 中自动执行文件连接过程,该过程与我一直使用的 bash 命令行过程一样有效。我的 bash CLI 进程使用 awk 来合并文件,而我尝试使用的 Python 使用 pandas。
例如,假设我有一个包含多个名为 part_0.csv、part_1.csv、...、part_n.csv 的 CSV 文件的目录。每个文件的第一行都包含一个标题。我为此使用的 bash CLI 命令:
$ cd directory_containing_csv_files
$ mv part_0.csv merged.csv
$ awk 'FNR > 1' part*.csv > merged.csv
Python/pandas 代码做同样的事情,但是当总大小变大时会发出嘶哑的声音:
# read all the CSVs into a single file using concatenation (assumes same schema for all files)
combined_df = pd.concat([pd.read_csv(pth, header=0) for pth in csv_paths])
# write as single CSV file
combined_df.to_csv(dest_path, index=False, header=True)
Python 代码在达到大小限制之前似乎运行良好(相关机器有 16GB RAM)。无论最终文件大小如何,bash 命令行处理都没有失败。
也许还有另一种不使用 pandas 的 Python 方法更节省内存?
【问题讨论】:
-
您可以随时使用
os.system()调用awk -
是的,使用
csv模块。 -
同意,这是最简单的,虽然它不是可移植的(在 Windows 机器上找不到 awk)。
-
这能回答你的问题吗? how to merge 200 csv files in Python
-
实际上,您不需要
csv模块,因为您不必实际解析 csv。