Чтение файла построчно в Python
Вопрос задан
Изменён 1 год 6 месяцев назад
Просмотрен 45k раза
Здраствуйте. В txt файле записано:
97 115 116
Каждое число записано с новой строки. Хотелось создать переменную или массив содержащий число, но банальный a = f.read()
не помогает, так как считывает целеком весь файл. Помогите пожалуйста)
- python
- python-3.x
- файлы
- python-2.x
Видимо вы поленились почитать про чтение файлов в python, поскольку сразу за file.read()
обычно в учебниках рассказывается о file.readline()
и file.readlines()
Поэтому у вас 3 варианта:
- Читать в цикле файл построчно через
- Читать весь файл сразу в список через
file.readlines()
, но тогда вам самостоятельно придется избавляться от символов перевода строки - Читать файл за один раз целиком и обрабатывать его через
splitlines()
—file.read().splitlines()
— тоже сразу в список и без символов перевода строк.
Последний вариант самый привлекательный, на мой взгляд:
with open('numbers.txt', 'r') as f: nums = f.read().splitlines() print(nums)
[’97’, ‘115’, ‘116’]
1
test.txt
97 115 116
with open('test.txt') as f: myList = [ line.split() for line in f ] print(myList) [['97'], ['115'], ['116']] flatList = [item for sublist in myList for item in sublist] print(flatList) ['97', '115', '116']
with open("file.txt") as file: str = [row.strip() for row in file]
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
строки — Python.
Построчное чтение из файлаВопрос задан
Изменён 5 месяцев назад
Просмотрен 1k раз
Задание:
Файл содержит список операций сравнения вида :
2 < 3 5 > 1 7 == 8 10 != 10Написать скрипт, который будет анализировать каждую строку, распознавать аргументы и оператор и генерировать файл out.txt, содержащий результаты данных выражений:
True True False True
Мой код:
with open('C:\\abc\in.txt', 'r') as f: fc = f.readlines() for line in fc: open('C:\\abc\out.txt', 'w').write(str(bool(eval('line')))) f.close()
В файл выводит только единственное значение True вместо комбинации нескольких результатов
- python
- строки
- файлы
2
Вы переписываете файл C:\\abc\out. txt
в цикле для каждой строки входного файла. В итоге в выходном файле будет результат обработки последней строки входного файла.
Попробуйте так:
with open(r'd:\temp\in.txt', 'r') as f, open(r'd:\temp\out.txt', 'w') as out: for line in f: print(str(bool(eval(line))), file=out)
NOTE: использование eval()
может быть очень опасным, лучше его вовсе не использовать.
4
Вариант без
:
OPS = { ">": lambda a, b: a > b, "<": lambda a, b: a < b, "==": lambda a, b: a == b, "!=": lambda a, b: a != b, } with open(r'd:\temp\in.txt', 'r') as f, open(r'd:\temp\out.txt', 'w') as out: for line in f: a, op, b = line.strip().split() result = OPS[op](int(a), int(b)) print(result, file=out)
2
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Чтение файла построчно в Python
Я новичок в Python. Итак, я пробовал свой первый базовый фрагмент кода. Итак, я пытался прочитать файл и распечатать его построчно в Python. Вот мой код:
класс ReadFile (объект): деф основной (я): прочитатьФайл = ЧитатьФайл() readFile.printData() def printData(я): имя_файла = "H:\\Рабочий стол\\TheFile.txt" пытаться: с открытым (имя файла, 'r') как f: значение = f.readline() печать (значение) е.закрыть() кроме исключения как ex: печать (бывший)
Теперь, когда я запускаю его, я не получаю никаких результатов. Поэтому я попытался отладить его. Я вижу, что элемент управления переходит от одного метода к другому (основной —> printData), а затем существует. Он ничего не выполняет в методе. Можете ли вы сказать мне, что я делаю неправильно здесь? Я новичок, поэтому было бы неплохо немного понять, почему код ведет себя таким образом.
- python
- python-3. x
- файл
- io
1
Если идея состоит в том, чтобы понять, как читать файл построчно, то все, что вам нужно сделать, это:
с open(filename, 'r') как f: для строки в f: печать (строка)
Нетипично помещать это в блок try-except.
Возвращаясь к вашему исходному коду, есть несколько ошибок, которые, как я предполагаю, связаны с непониманием того, как классы определяются/работают в python.
Судя по тому, как вы написали этот код, вы, возможно, имеете опыт работы с Java. Я настоятельно рекомендую пройти один из множества бесплатных и действительно хороших онлайн-курсов по Python, предлагаемых на Coursera или EdX.
В любом случае, вот как бы я это сделал, используя класс:
class ReadFile: def __init__(я, путь): self.path = путь деф print_data (я): с open(self.path, 'r') как f: для строки в f: печать (строка) если __name__ == "__main__": читатель = ReadFile("H:\\Desktop\\TheFile.txt") читатель.print_data()
2
Вам действительно не нужен класс для этого и вам не нужен блок try или file.close при использовании диспетчера контекста (с открытым ….).
Пожалуйста, прочитайте, как классы используются в python. Для этого подойдет функция
def read(): имя_файла = "C:\\Пользователи\\file.txt" с открытым (имя файла, 'r') как f: для строки в f: печать (строка)
вы обычно не помещаете основной метод в класс. Python не похож на Java или C#. весь код вне класса будет выполняться при загрузке файла.
вы создаете классы только тогда, когда хотите инкапсулировать некоторые данные с методами вместе в объект. В вашем случае похоже, что вам вообще не нужен класс, но если вы хотите его, вы должны явно создать и вызвать его, например:
класс А: защита __init__(сам): печать('конструктор') защита взрыва (я): распечатать('взрыв') # выполняется код вне класса (например, метод main в Java/C#) а = А() а. бэнг()
Здесь есть несколько проблем.
Во-первых, вы объявляете класс, но затем не используете его (кроме как внутри него). Вам нужно будет создать экземпляр класса вне класса (или вызвать для него метод класса), чтобы он был создан.
класс ReadFile: деф print_data (я): ... # Создать новый объект, который является экземпляром класса ReadFile an_object = ЧитатьФайл() # Вызвать метод print_data() для объекта an_object an_object.print_data()
Теперь вам не нужно использовать классы для решения этой проблемы, так что вы можете игнорировать все это и просто использовать код, который у вас есть внутри вашего метода printData:
filename = "H:\\Desktop\\TheFile .текст" пытаться: с открытым (имя файла, 'r') как f: значение = f.readline() печать (значение) # в этом нет необходимости, так как f допустимо только в # область действия блока with # f.закрыть() кроме исключения как ex: печать (бывший)
Вы обнаружите, что это почти то, что вам нужно. Вам просто нужно изменить его, чтобы напечатать весь файл, а не только первую строку. Здесь вместо простого чтения одной строки с помощью f.readline()
мы можем перебрать результат f.readlines()
:
filename = "H:\\Desktop\\TheFile.txt" пытаться: с открытым (имя файла, 'r') как f: для значения в f.readlines(): # прочитать все строки печать (значение) кроме исключения как ex: печать (бывший)
string — Чтение файла .txt построчно в Python
Задавать вопрос
спросил
Изменено 7 лет, 11 месяцев назад
Просмотрено 33 тысячи раз
Мой файл .txt выглядит так:
![введите здесь описание изображения][1]
Как я могу прочитать свой txt-файл в строковый объект, который можно распечатать в том же формате, что и выше?
Я пробовал: с открытым ("/Users/it/Desktop/Classbook/masterClassList. txt", "r") в качестве моего файла: данные = myfile.read() для элемента данных: элемент печати
Этот код печатает каждый символ с новой строки. Мне нужно, чтобы файл txt был строкой, чтобы вызывать строковые методы, в частности ‘string.startswith()’
Как вы можете видеть, в моей консоли IDE строки печатаются с черной линией пробелов между строками. содержания. Как я могу удалить эти пустые строки?
Вот мое рабочее решение:
с открытым ("/Users/it/Desktop/Classbook/masterClassList.txt", "r") в качестве моего файла: данные = myfile.read() для строки в данных: линия.rstrip() распечатать данные
- python
- string
- readfile
- string-split
Самый эффективный способ чтения строк:
with open ("/Users/it/Desktop/Classbook/masterClassList.txt.txt. ") как мой файл: для строки в моем файле: линия печати
т.е. вам не нужно считывать весь файл в память, только построчно.