2010-07-09 2 views
2
def file_open(filename): 
    fo=open(filename,'r') 
    #fo.seek(5) 
    fo.read(3) 
    fo.close() 

file_open("file_ro.py") 

Я ожидаю, что выше программа вернет первые 3 байта из файла. Но он ничего не возвращает. Когда я запускал их в интерактивной командной строке python - я получаю ожидаемый результат!Файл python читается

+0

я получил answer..need, чтобы сохранить его в переменной .. –

ответ

7

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

  • file_open не хорошее имя для функции, так как она читает и возвращает байты из файла, а не только его открытия.
  • Вы должны убедиться, что вы закрываете файл, даже если fo.read(3) не работает. Вы можете использовать the with statement для решения этой проблемы.

Измененный код может выглядеть примерно так:

def read_first_bytes(filename): 
    with open(filename,'r') as f: 
     return f.read(3) 

Использование:

>>> print read_first_bytes("file.py") 
+0

+1 для указания 'with'-statement –

+0

для python2.5 вы можете' из __future__ import with_statement' –

0
import sys 
def file_open(filename): 
     fo=open(filename,'r') 
     #fo.seek(5) 
     read_data=fo.read(3) 
     fo.close() 
     print read_data 
file_open("file.py") 
+1

возвращение read_data будет лучше –

+0

спасибо ... он добавит его –

1

fo.read()возвращает данные, которые считывали, и вы никогда не назначать его ни к чему. Вы говорите об «выходе», но ваш код не должен выводить ничего. Вы пытаетесь напечатать эти три байта? В этом случае, если вы ищете что-то вроде

f = open('file_ro.py', 'r') 
print f.read(3) 

Вы получаете «ожидаемый результат» в интерактивном режиме, так как он выводит результат оценки, если он не назначен в любом месте (и если это не None ?), как и в линии fo.read(3). Или что-то в этом роде, может быть, кто-то может объяснить это лучше.

Смежные вопросы