Чтение файла без перевода строки в Python
В Python вызывается
temp = open(filename,'r').readlines()
приводит к списку, в котором каждый элемент представляет собой строку в файле. Это немного глупо, но все же: readlines()
также пишет символ новой строки для каждого элемента, чего я не желаю.
Как я могу избежать этого?
Ответы
Ответ 1
Вы можете прочитать весь файл и разделить строки, используя str.splitlines
:
temp = file.read().splitlines()
Или вы можете разбить новую строку вручную:
temp = [line[:-1] for line in file]
Примечание: это последнее решение работает только в том случае, если файл заканчивается символом новой строки, иначе последняя строка потеряет символ.
Это предположение верно в большинстве случаев (особенно для файлов, созданных текстовыми редакторами, которые в любом случае добавляют конец новой строки).
Если вы хотите этого избежать, вы можете добавить новую строку в конце файла:
with open(the_file, 'r+') as f:
f.seek(-1, 2) # go at the end of the file
if f.read(1) != '\n':
# add missing newline if not already present
f.write('\n')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
Или проще использовать strip
вместо новой строки:
[line.rstrip('\n') for line in file]
Или даже, хотя довольно нечитаемый:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Используется тот факт, что возвращаемое значение or
не является логическим, но объект, который был оценен как true или false.
Метод readlines
фактически эквивалентен:
def readlines(self):
lines = []
for line in iter(self.readline, ''):
lines.append(line)
return lines
# or equivalently
def readlines(self):
lines = []
while True:
line = self.readline()
if not line:
break
lines.append(line)
return lines
Так как readline()
поддерживает также символ новой строки readlines()
.
Примечание: для симметрии readlines()
метод writelines()
не добавляет окончание новых строк, поэтому f2.writelines(f.readlines())
создает точную копию f
в f2
.
Ответ 2
temp = open(filename,'r').read().split('\n')
Ответ 3
temp = open(filename,'r').read().splitlines()
Ответ 4
другой пример:
Чтение файла по одной строке за раз. Удаление ненужных символов с конца строки str.rstrip(chars)
with open(filename, 'r') as fileobj:
for row in fileobj:
print( row.rstrip('\n') )
см. также str.strip([chars])
и str.lstrip([chars])
(python> = 2.0)
Ответ 5
Я думаю, что это лучший вариант.
temp = [line.strip() for line in file.readlines()]
Ответ 6
Попробуй это:
u=open("url.txt","r")
url=u.read().replace('\n','')
print(url)
Ответ 7
import csv
with open(filename) as f:
csvreader = csv.reader(f)
for line in csvreader:
print(line[0])
Ответ 8
Чтобы удалить все начальные и конечные пробелы (вдохновлено Абага Ответ) -
temp = [line.strip() for line in open("filename")]
Чтобы удалить все конечные пробелы, включая символ новой строки -
temp = [line.rstrip() for line in open("filename")]
Если вы просто хотите удалить завершающий символ новой строки, а не пробелы -
temp = [line.rstrip('\r\n') for line in open("filename")]
P.S. Если вы найдете это полезным, пожалуйста, подпишите его.
Ответ 9
my_file = open("first_file.txt", "r")
for line in my_file.readlines():
if line[-1:] == "\n":
print(line[:-1])
else:
print(line)
my_file.close()
Ответ 10
def getText():
file=open("ex1.txt","r");
names=file.read().split("\n");
for x,word in enumerate(names):
if(len(word)>=20):
return 0;
print "length of ",word,"is over 20"
break;
if(x==20):
return 0;
break;
else:
return names;
def show(names):
for word in names:
len_set=len(set(word))
print word," ",len_set
for i in range(1):
names=getText();
if(names!=0):
show(names);
else:
break;