Python - 从终端调用数千个文本文件的函数 - 5000 个文件限制?
Python - calling function from terminal on thousands of text files - 5000 files limit?
我正在使用以下命令从控制台调用 python 函数:
printf '%s[=11=]' *.txt | xargs -0 python ./functionName.py
我要处理的目录中有将近 10500 个文本文件。
对于处理的每个文件,我打印文件编号和文件总数:
cnt=0
for f in sys.argv[1:]:
cnt=cnt+1
print "Processing file ", cnt, " of : ", len(sys.argv[1:])
使用这个,我看到 len(sys.argv[1:]
是 5000,然后它再次开始另外 5000,最后剩下的 500 个文件。
最后,我想为每个文本文件编写我在 .csv
文件中处理一些关键变量
writer.writerow([var1, var2, var3, ... , varN])
我遇到的问题是只写入了最后500个文件的变量..
我怀疑这与 len(sys.argv[1:]
是 5000 有关,尽管它应该是 10500..
我知道文件数量有问题,因为它适用于更少的文件..
5000 有限制吗?
我能以某种方式解决这个问题吗?
这实际上是 xargs
的 功能 之一:它将大量输入拆分为它应该调用的命令的多个调用(请参阅 xargs manual page).参数的默认最大数目为 5000,因此 xargs
调用您的程序 3 次:使用 5000、5000 和 500 个文件名作为参数。您可以使用 -n
选项修改每次调用的参数数量的 xargs
设置。
也就是说,我怀疑将 10500 个文件名作为命令行参数传递是个好主意。您应该使用 Python 的工具以您想要的方式扫描文件系统。在您的情况下,这是使用 glob 模块的问题。例如像这样:
import glob
for filename in glob.glob("*.txt"): ...
我正在使用以下命令从控制台调用 python 函数:
printf '%s[=11=]' *.txt | xargs -0 python ./functionName.py
我要处理的目录中有将近 10500 个文本文件。
对于处理的每个文件,我打印文件编号和文件总数:
cnt=0
for f in sys.argv[1:]:
cnt=cnt+1
print "Processing file ", cnt, " of : ", len(sys.argv[1:])
使用这个,我看到 len(sys.argv[1:]
是 5000,然后它再次开始另外 5000,最后剩下的 500 个文件。
最后,我想为每个文本文件编写我在 .csv
文件中处理一些关键变量
writer.writerow([var1, var2, var3, ... , varN])
我遇到的问题是只写入了最后500个文件的变量..
我怀疑这与 len(sys.argv[1:]
是 5000 有关,尽管它应该是 10500..
我知道文件数量有问题,因为它适用于更少的文件..
5000 有限制吗?
我能以某种方式解决这个问题吗?
这实际上是 xargs
的 功能 之一:它将大量输入拆分为它应该调用的命令的多个调用(请参阅 xargs manual page).参数的默认最大数目为 5000,因此 xargs
调用您的程序 3 次:使用 5000、5000 和 500 个文件名作为参数。您可以使用 -n
选项修改每次调用的参数数量的 xargs
设置。
也就是说,我怀疑将 10500 个文件名作为命令行参数传递是个好主意。您应该使用 Python 的工具以您想要的方式扫描文件系统。在您的情况下,这是使用 glob 模块的问题。例如像这样:
import glob
for filename in glob.glob("*.txt"): ...