Python readlines() от 3.X до 2.X

У меня есть скрипт, изначально написанный для python 3.5+. Мне нужно преобразовать его в 2.6.2. В сценарии я использую readlines(), который, как мне кажется, ведет себя по-разному в двух версиях. В частности, я использую readlines() для извлечения данных из текстового файла, разделенного разрывами строк.

Вот фрагмент:

t=open(supportID+"stmp.txt","r")
timeIn=(t.readlines())
a=(str(timeIn))
supportID=(t.readlines())
b=(str(supportID))
branch=(t.readlines())
c=(str(branch))
clientID=(t.readlines())
d=(str(clientID))
problem=(t.readlines())
e=(str(problem))
solution=(t.readlines())
f=(str(solution))
timeOut=(t.readlines())
g=(str(timeOut))

В моем сценарии для 3.x у меня была «1» в каждом из readlines(), и он выполнялся по мере необходимости, однако с 2.x это не работает. Я пробовал вводить значения 1-7 и пустые, как показано выше.

Проведя небольшое исследование, я обнаружил, что некоторые пользователи 2.x используют with open(filename) Это предпочтительный метод или есть способ изменить мой оригинал, чтобы он работал?

Обновлено: Так что я собираюсь использовать этот формат

with open(supportID+"stmp.txt") as t:
    for line in t:
        print(line)

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

Обновлено еще раз: В настоящее время это работает для моей среды, но не является лучшей практикой для этой функции. Читает в каждой строке и присваивает каждой строке переменную.

t=open(supportID+"stmp.txt","r")
lines = t.readlines()
t.close()
a=lines[0]
b=lines[1]
c=lines[2]
...

Это не будет работать, как вы говорите, в Python 3, здесь оно работает так же, как Python 2. Оператор with используется как в Python 2, так и в 3, кстати. Я собираюсь предположить, что в вашем скрипте Python 3 вы использовали readline вместо readlines

juanpa.arrivillaga 15.02.2019 17:54

использование x=readlines(1) работало для чтения tmp-файла в 3 раза построчно в моей среде. Вы говорите, что with open(x) будет предпочтительным методом в 3.x и 2.x?

Newb 4 You BB 15.02.2019 17:57

Вы не используете realines(1) и не должны, это верхняя граница байты, а не линии. Вы должны использовать readline. И да, вы всегда должны использовать диспетчер контекста (оператор with) для открытия файлов.

juanpa.arrivillaga 15.02.2019 17:59
первоначально У меня было readlines(1). Но если бы вы могли объяснить, почему это байты, а не строки, я был бы признателен. Я только что наткнулся на это как вариант в 2x и 3x with open('somefile.txt') as f: for line in f: print(line)
Newb 4 You BB 15.02.2019 18:06

Я не уверен, что вы хотите, чтобы я объяснил. На вопрос «почему» отвечает «потому что разработчики языка решили, что аргумент должен означать именно это». Вы должны проверить документы.

juanpa.arrivillaga 15.02.2019 18:09

Да, это идиоматический способ чтения файла построчно.

juanpa.arrivillaga 15.02.2019 18:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
6
532
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

попробуйте этот код: (я предполагаю, что он будет работать с версией Python >= 2.6)

with open('lines.txt','r') as f:
    lines = f.readlines()
    for line in lines:
       print(line.strip())

хуанпа.арривиллага. Я не знаю... "Newb 4 You BB" должно лучше объяснить, что он пытается сделать.

balderman 15.02.2019 18:04

@balderman то, что происходит в моем сценарии, я использую для ввода, который хранится в файле, разделенном разрывами строк. Затем у меня есть этот раздел, пытающийся захватить каждую строку как отдельную часть информации для ввода в другой файл.

Newb 4 You BB 15.02.2019 18:08
Ответ принят как подходящий

Для прочитать в каждой строке из файла и присвоить переменной я использовал этот метод для python 2.6.2

t=open(supportID+"stmp.txt","r")
lines = t.readlines()
t.close()
a=lines[0]
b=lines[1]
c=lines[2]
...

Если вы на самом деле не необходимость список lines, нет реальной причины использовать readlines. a = t.readline() и др.

chepner 15.02.2019 19:13

Другие вопросы по теме