在Python中,调用例如temp = open(filename,'r').readlines()会得到一个列表,其中每个元素都是文件中的一行。然而,这些字符串在末尾有一个换行符,这是我不想要的。
我怎么能得到没有换行符的数据?
在Python中,调用例如temp = open(filename,'r').readlines()会得到一个列表,其中每个元素都是文件中的一行。然而,这些字符串在末尾有一个换行符,这是我不想要的。
我怎么能得到没有换行符的数据?
当前回答
要去除尾随的行结束符(/n)字符和空列表值("),尝试:
f = open(path_sample, "r")
lines = [line.rstrip('\n') for line in f.readlines() if line.strip() != '']
其他回答
我认为这是最好的选择。
temp = [line.strip() for line in file.readlines()]
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()
你可以使用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]
或者一个更简单的选择是去掉换行符:
[line.rstrip('\n') for line in file]
甚至,尽管很难读懂:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
它利用了这样一个事实,即or的返回值不是布尔值,而是被计算为真或假的对象。
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.r edlines())在f2中生成f的精确副本。
import csv
with open(filename) as f:
csvreader = csv.reader(f)
for line in csvreader:
print(line[0])
您可以使用列表推导式轻松地将文件读取为列表
with open("foo.txt", 'r') as f:
lst = [row.rstrip('\n') for row in f]