Python read () не читает файл - PullRequest
       1

Python read () не читает файл

0 голосов
/ 06 сентября 2018

Итак, я сделал простой скрипт на Python, который принимает имя файла в качестве аргумента командной строки и читает данный файл всякий раз, когда скрипт выполняется. Довольно просто, когда я выполняю скрипт, он не печатает текст внутри файла, и при этом я не получаю сообщение об ошибке. Я довольно новичок в программировании и часами ломаю голову над этим фрагментом кода.

import sys

def openfile(filename):
    f = open(filename, mode='r')
    f.read()
    f.close()

if __name__ == '__main__':
        openfile(filename = sys.argv[1])
        print('script has been executed')

Быстрый отказ от ответственности Я знаю, что кто-то опубликовал похожий вопрос несколько лет назад, но он не получил прямого ответа о том, почему его код не работал, и я не получил информацию, которую искал за ответы. Также извините за мой плохой английский. Я старался изо всех сил, чтобы это было ясно, но английский не мой родной язык.

Ответы [ 5 ]

0 голосов
/ 06 сентября 2018

Я настоятельно рекомендую подход @mootmoot с менеджером контекста. Это не только легче для чтения, но и для ловли исключений, когда файл не может быть прочитан по какой-либо причине. Если вы не хотите использовать менеджер контекста, я бы посоветовал вам использовать команды try-кроме для вашей функции. Это небезопасно, если вы сделаете это, как предложил @ Adam Merki, потому что не будет гарантии, что файл закроется, если во время чтения файла возникнет исключительная ситуация.

Используя операторы try-кроме, ваша функция может выглядеть так:

import sys

def openfile(filename):

    f = open(filename, mode='r')
    try:
        print(f.read())

    except:
        print('something went wrong')

    else:
        print('nothing went wrong')

    finally:
        f.close()


if __name__ == '__main__':
    openfile(filename=sys.argv[1])
    print('script has been executed')
0 голосов
/ 06 сентября 2018

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

Например:

f = open("SampleTextFile_100kb.txt", "rt") здесь r для чтения и t для текстового файла

print(f.read()) # ЧТЕНИЕ И ПЕЧАТЬ ПОЛНОГО ФАЙЛА.

print(f.read(55)) # ЧТОБЫ ПРОЧИТАТЬ В ЛИМИТУЮ УКАЗАННЫХ СИМВОЛОВ.

ЧТЕНИЕ ЛИНИИ / S ИЛИ ЦЕЛЬНОГО ФАЙЛА КАК ЛИНИИ:

print(f.readline()) #TO READ MULTIPLE LINES print(f.readline()) print(f.readline())

ЧИТАТЬ ВСЕ ФАЙЛ КАК ЛИНИИ

for x in f:<br> print(x)

надеюсь, это поможет.

0 голосов
/ 06 сентября 2018

Похоже, что программа просто читает файл, переданный в аргумент командной строки. Программа работает и читает файл, но вам нужна строка, чтобы указать python распечатать содержимое файла, который вы читаете. Попробуйте это:

import sys

def openfile(filename):
    f = open(filename, mode='r')
    contents = f.read()
    print(contents)
    f.close()

if __name__ == '__main__':
    openfile(filename=sys.argv[1])
    print('script has been executed')
0 голосов
/ 06 сентября 2018

Для новичка в Python изучение Python анти-паттернов является обязательным.Это позволяет избежать многих ошибок и ошибок.OP, очевидно, имеет опыт работы с другими языками программирования, но не знает лучшего способа работы в Python.

Если вы изучите анти-шаблон, вы узнаете, with open() - лучший способ открыть файл.Сразу же вы увидите f в качестве обработчика файла, который не будет хранить никаких данных, пока вы не передадите данные из функции f.read() в другую переменную.

def openfile(filename):
    with open(filename) as f:
        data = f.read()
    # to print out the contents
    print(data)

Использование sys.argv допустимо, но argparse настоятельно рекомендуется.

0 голосов
/ 06 сентября 2018

Вы читаете файл f.read(), но вам необходимо присвоить содержимое переменной или распечатать ее или что-то еще. Python не будет печатать содержимое каждого файла, который вы прочитали, только потому, что вы его прочитали: вы должны указать ему, что делать с результатом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...