У меня есть скрипт, изначально написанный для 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]
...
использование x=readlines(1) работало для чтения tmp-файла в 3 раза построчно в моей среде. Вы говорите, что with open(x) будет предпочтительным методом в 3.x и 2.x?
Вы не используете realines(1) и не должны, это верхняя граница байты, а не линии. Вы должны использовать readline. И да, вы всегда должны использовать диспетчер контекста (оператор with) для открытия файлов.
readlines(1). Но если бы вы могли объяснить, почему это байты, а не строки, я был бы признателен. Я только что наткнулся на это как вариант в 2x и 3x with open('somefile.txt') as f: for line in f: print(line)Я не уверен, что вы хотите, чтобы я объяснил. На вопрос «почему» отвечает «потому что разработчики языка решили, что аргумент должен означать именно это». Вы должны проверить документы.
Да, это идиоматический способ чтения файла построчно.






попробуйте этот код: (я предполагаю, что он будет работать с версией 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 то, что происходит в моем сценарии, я использую для ввода, который хранится в файле, разделенном разрывами строк. Затем у меня есть этот раздел, пытающийся захватить каждую строку как отдельную часть информации для ввода в другой файл.
Для прочитать в каждой строке из файла и присвоить переменной я использовал этот метод для 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() и др.
Это не будет работать, как вы говорите, в Python 3, здесь оно работает так же, как Python 2. Оператор
withиспользуется как в Python 2, так и в 3, кстати. Я собираюсь предположить, что в вашем скрипте Python 3 вы использовалиreadlineвместоreadlines