我确信这是一个常见的问题,但我是一个蟒蛇新手,我不知道如何搜索这个问题。
我有一个像这样的函数的脚本:
firstarg = sys.argv[1]
secondarg = sys.argv[2]
def examplefunc(firstarg):
#does something
#returns something
def example2(firstarg, secondarg):
#also does something and returns something
我有一个包含大量txt文件的文件夹。对于第一个示例函数,我想循环遍历所有这些txt文件并将答案打印到一个新文件中(即将每个txt文件作为firstarg传递)。类似地,对于第二个函数,我想将第一个参数修复为一个特定的txt文件,而第二个参数循环遍历所有剩余的txt文件。
我知道如何使用这样的参数运行python命令的唯一方法是在我的终端中运行以下形式:
python myscript.py ./txtfile1 ./txtfile2
然后相应地更改参数。我相信有更好的方法。有人可以帮忙吗?
答案 0 :(得分:1)
如果要获取目录中所有文件的列表,有两种方法可以做到。
首先,从Python之外,只需执行此操作:
python myscript.py txtfile1 *
现在,您的sys.argv
将类似于['myscript.py', 'txtfile1', 'txtfile1', 'txtfile2', 'txtfile3', 'txtfile4']
。因此,如果您想在每个文件上运行examplefunc
,然后针对每个文件在example2
上运行txtfile1
:
special_file = sys.argv[1]
everything_else = sys.argv[2:]
for filename in everything_else:
examplefunc(filename)
for filename in everything_else:
example2(special_file, filename)
但你也可以从里面的 Python中做到这一点。传入目录而不是一堆文件,例如python myscript.py txtfile1 .
。然后,您的sys.argv
将为['myscript.py', 'txtfile1', '.']
,您可以执行此操作:
special_file = sys.argv[1]
everything = os.listdir(sys.argv[2]))
答案 1 :(得分:1)
首先,不要将文件名作为参数传递。使用os.walk获取目录中所有.txt
文件的列表,然后您可以轻松读取文件并在Python代码中循环显示这些文件。
答案 2 :(得分:0)
更好的方法是从程序中迭代遍历目录中的每个文件:
import os
def file_iterator(dir_to_traverse):
for path,dirs,files in os.walk(dir_to_traverse):
for f_name in files:
yield os.path.join(path,f_name)
break
for file_name in file_iterator('.'):
print file_name