2015-02-05 3 views
0

Я пытаюсь сделать пару вещей здесь со сценарием ниже (он неполный). Во-первых, нужно прокрутить некоторые подкаталоги. Я смог сделать это успешно. Во-вторых, нужно открыть конкретный файл (это одноименное имя в каждом подкаталоге) и найти минимальное и максимальное значение в каждом столбце ЗА ИСКЛЮЧЕНИЕМ первого.Python - Файл не существует Ошибка

Сейчас я застрял в поиске максимального значения в одном столбце, потому что файлы, которые я читаю, имеют две строки, которые я хочу игнорировать. К сожалению, я получаю следующее сообщение об ошибке при попытке запустить код:

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

привет, добро пожаловать в переполнение стека. Ошибка, которую вы описываете, не имеет ничего общего с заголовком сообщения, что путается для людей, которые пришли, чтобы ответить. Вы должны спросить о проблеме, с которой вы столкнулись, а не о большем контексте ... нам не нужно знать об этом, пока/до тех пор, пока вы не исправите проблему с файлом, и все еще что-то не так :) –

+0

Простите за это! Исходная проблема исправлена. Думаю, теперь мы переходим к большему вопросу. Все в порядке, если я оставлю это как есть? –

+0

Не совсем, вы должны задать новый вопрос. В противном случае все люди будут распространять свой вопрос с новыми вопросами все время, и это побеждает цель механизма «одного вопроса» Stackoverflow. –

ответ

1

Когда вы пишете open(file), Python пытается найти файл tc.out в директории, где вы начали интерпретатору. Вы должны использовать полный путь к этому файлу в разомкнут:

with open(os.path.join(root, file)) as f: 

Позвольте мне проиллюстрировать на примере:

У меня есть файл с именем «somefile.txt» в каталоге /tmp/sto/deep/ (это система Unix , поэтому я использую косые черты). А то у меня этот простой скрипт, который находится в каталоге /tmp:

[email protected]:/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.

[email protected]:/tmp$ python myscript.py 
Filename: somefile.txt 
directory: /tmp/sto/deep 
contents 
+0

Это сработало! Спасибо Оливер и Сельчук. –

1

Чтобы открыть файл, вам необходимо указать полный путь. Вам нужно изменить строку

with open(file) as f: 

в

with open(os.path.join(root, file)) as f: 
Смежные вопросы