我正在尝试使用下面的脚本做一些事情(它不完整)。首先是遍历一些子目录。我能够成功地做到这一点。第二件事是打开一个特定的文件(每个子目录中的名称相同),并在每列中找到最小值和最大值,除了第一列。
现在我不得不在单个列中查找最大值,因为我正在阅读的文件有两行我想忽略。不幸的是,我在尝试运行代码时遇到以下错误:
Traceback (most recent call last):
File "test_script.py", line 22, in <module>
with open(file) as f:
IOError: [Errno 2] No such file or directory: 'tc.out'
以下是我的代码的当前状态:
import scipy as sp
import os
rootdir = 'mydir'; #mydir has been changed from the actual directory path
data = []
for root, dirs, files in os.walk(rootdir):
for file in files:
if file == "tc.out":
with open(file) as f:
for line in itertools.islice(f,3,None):
for line in file:
fields = line.split()
rowdata = map(float, fields)
data.extend(rowdata)
print 'Maximum: ', max(data)
答案 0 :(得分:1)
要打开文件,您需要指定完整路径。您需要更改行
with open(file) as f:
到
with open(os.path.join(root, file)) as f:
答案 1 :(得分:1)
当您编写open(file)
时,Python正在尝试在您启动解释器的目录中找到文件tc.out
。您应该在open中使用该文件的完整路径:
with open(os.path.join(root, file)) as f:
让我举一个例子说明:
我有一个名为&#39; somefile.txt&#39;的文件。在目录/tmp/sto/deep/
中(这是一个Unix系统,所以我使用正斜杠)。然后我有这个简单的脚本,它位于目录/tmp
:
oliver@armstrong:/tmp$ cat myscript.py
import os
rootdir = '/tmp'
for root, dirs, files in os.walk(rootdir):
for fname in files:
if fname == 'somefile.txt':
with open(os.path.join(root, fname)) as f:
print('Filename: %s' % fname)
print('directory: %s' % root)
print(f.read())
当我从/tmp
目录执行此脚本时,您会看到fname
只是文件名,省略了通向它的路径。这就是为什么你需要加入来自os.walk
的第一个返回参数的原因。
oliver@armstrong:/tmp$ python myscript.py
Filename: somefile.txt
directory: /tmp/sto/deep
contents