在Python中读取没有换行符的文件

在Python中,调用

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

的结果是一个列表,其中的每个元素都是文件中的一个行。这有点傻,但仍然是:readlines()也会给每个元素写入换行符,这是我不希望发生的。

我怎样才能避免这种情况呢?

对该问题的评论 (2)
解决办法

你可以使用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.readlines())f2中产生f的精确副本。

评论(7)
temp = open(filename,'r').read().split('\n')
评论(10)

我认为这是最好的选择。

temp = [line.strip() for line in file.readlines()]
评论(3)
temp = open(filename,'r').read().splitlines()
评论(1)

另一个例子。

每次只读一行文件。 从字符串末尾删除不需要的字符 [str.rstrip(chars)][1] 。

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

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

[1]: https://docs.python.org/2/library/stdtypes.html#str.rstrip

(python >= 2.0)

评论(0)

试试这个。

u=open("url.txt","r")  
url=u.read().replace('\n','')  
print(url)  
评论(1)
import csv

with open(filename) as f:
    csvreader = csv.reader(f)
    for line in csvreader:
         print(line[0])
评论(1)

去掉所有的前导和尾部的空格(灵感来自 [Абага's Answer][1]) -------。

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.如果你觉得对你有帮助,那么也请你给他加注。

[1]: https://stackoverflow.com/a/54479377/1772898

评论(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() 
评论(1)
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;
评论(0)