540

在 Python 中,调用

temp = open(filename,'r').readlines()

生成一个列表,其中每个元素都是文件中的一行。这有点愚蠢但仍然:readlines()还向每个元素写入换行符,这是我不希望发生的事情。

我怎样才能避免它?

4

10 回答 10

788

您可以使用以下命令读取整个文件并拆分行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不是布尔值,而是被评估为真或假的对象这一事实。


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()不会添加结束换行符,因此会生成in的精确副本。writelines()f2.writelines(f.readlines())ff2

于 2012-09-08T11:57:07.220 回答
66
temp = open(filename,'r').read().splitlines()
于 2012-09-08T11:57:56.690 回答
28

一次读取一行文件。使用 .从字符串末尾删除不需要的字符str.rstrip(chars)

with open(filename, 'r') as fileobj:
    for row in fileobj:
        print(row.rstrip('\n'))

另见str.strip([chars])str.lstrip([chars])

于 2018-09-28T15:04:31.670 回答
15

我认为这是最好的选择。

temp = [line.strip() for line in file.readlines()]
于 2019-02-01T12:18:08.883 回答
12
temp = open(filename,'r').read().splitlines()
于 2017-08-17T02:01:22.773 回答
1

尝试这个:

u=open("url.txt","r")  
url=u.read().replace('\n','')  
print(url)  
于 2018-02-05T04:23:56.177 回答
0

要摆脱尾随的行尾 ( /n) 字符和空列表值 ( ''),请尝试:

f = open(path_sample, "r")
lines = [line for line in f.readlines() if line.strip() != '']
于 2021-05-30T09:30:42.683 回答
0

这里的脚本将从文件中获取行,并在file2的末尾保存没有换行符的每一行,0结尾。

file = open("temp.txt", "+r")
file2 = open("res.txt", "+w")
for line in file:
    file2.writelines(f"{line.splitlines()[0]},0\n")
file2.close()

如果你看line,这个值是data\n,所以我们把splitlines()

使其成为一个数组[0]选择唯一的单词数据

于 2022-02-22T19:52:38.210 回答
-2
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() 
于 2018-08-12T14:39:12.633 回答
-4
import csv

with open(filename) as f:
    csvreader = csv.reader(f)
    for line in csvreader:
         print(line[0])
于 2016-10-04T12:33:17.593 回答