读取没有换行符的文件

时间:2012-09-08 11:55:16

标签: python readlines

在Python中,调用

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

产生一个列表,其中每个元素都是文件中的一行。它有点愚蠢但仍然:readlines()也为每个元素写了换行符,这是我不希望发生的。我怎么能避免呢?

11 个答案:

答案 0 :(得分:415)

您可以使用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() f2.writelines(f.readlines())方法的对称性,添加结束换行符,因此f会产生精确的副本f2中的{{1}}。

答案 1 :(得分:29)

temp = open(filename,'r').read().split('\n')

答案 2 :(得分:7)

temp = open(filename,'r').read().splitlines()

答案 3 :(得分:7)

另一个例子:

一次读取文件。从字符串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)

答案 4 :(得分:4)

我认为这是最好的选择。

temp = [line.strip() for line in file.readlines()]

答案 5 :(得分:1)

试试这个:

u=open("url.txt","r")  
url=u.read().replace('\n','')  
print(url)  

答案 6 :(得分:0)

import csv

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

答案 7 :(得分:0)

要删除所有前导和尾随空格(从Абага's Answer启发而来)-

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")]

建议。如果您认为有帮助,也请对他进行投票。

答案 8 :(得分:0)

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

f = open(path_sample, "r")
lines = [line for line in f.readlines() if line.strip() != '']

答案 9 :(得分:-1)

with(df,  NA^(!test_FALL & !test_SPRING) * rowSums(cbind(
                       score_SPRING * test_SPRING,  
                       score_FALL * test_FALL), 
                    na.rm = TRUE))
#[1] 75 54 57 51 57 87 62 87 73 69

答案 10 :(得分:-6)

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;