我是一个完整的Python Newb
我需要遍历查找.txt文件的目录,然后单独读取和处理它们。我想设置它,以便脚本所在的任何目录都被视为此操作的根目录。例如,如果脚本位于/ bsepath / workDir中,那么它将循环遍历workDir及其子项中的所有文件。
到目前为止我所拥有的是:
#!/usr/bin/env python
import os
scrptPth = os.path.realpath(__file__)
for file in os.listdir(scrptPth)
with open(file) as f:
head,sub,auth = [f.readline().strip() for i in range(3)]
data=f.read()
#data.encode('utf-8')
pth = os.getcwd()
print head,sub,auth,data,pth
此代码给出了无效的语法错误,我怀疑这是因为os.listdir
不喜欢标准字符串格式的文件路径。另外,我不认为我正在做循环行动。如何在循环操作中引用特定文件?它是否打包为变量?
任何帮助都是适当的
答案 0 :(得分:3)
os.listdir
期望一个目录作为输入。因此,要获取脚本所在的目录:
scrptPth = os.path.dirname(os.path.realpath(__file__))
此外,os.listdir
仅返回文件名,而不是完整路径。
因此,除非当前工作目录恰好是脚本所在的目录,否则open(file)
将不起作用。要解决此问题,请使用os.path.join
:
import os
scrptPth = os.path.dirname(os.path.realpath(__file__))
for file in os.listdir(scrptPth):
with open(os.path.join(scrptPth, file)) as f:
最后,如果要通过子目录进行递归,请使用os.walk
:
import os
scrptPth = os.path.dirname(os.path.realpath(__file__))
for root, dirs, files in os.walk(scrptPth):
for filename in files:
filename = os.path.join(root, filename)
with open(filename, 'r') as f:
head,sub,auth = [f.readline().strip() for i in range(3)]
data=f.read()
#data.encode('utf-8')