读取没有换行符的文件
在Python中,调用
temp = open(filename,'r').readlines()
产生一个列表,其中每个元素是文件中的一行。 它有点愚蠢,但仍然: readlines()
也写入换行符到每个元素,我不希望发生的事情。 我怎样才能避免它?
您可以使用str.splitlines
来读取整个文件和拆分行:
temp = file.read().splitlines()
或者你可以用手去掉换行符:
temp = [line[:-1] for line in file]
注意:最后一个解决scheme只在文件以换行符结束时才起作用,否则最后一行将失去一个字符。
这个假设在大多数情况下都是正确的(特别是对于由文本编辑器创build的文件,无论如何通常会添加结束的新行)。
如果你想避免这种情况,你可以在文件末尾添加一个换行符:
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]
或者更简单的select是去掉换行符:
[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
的精确副本。
temp = open(filename,'r').read().split('\n')
import csv with open(filename) as f: csvreader = csv.reader(f) for line in csvreader: print(line[0])
temp = open(filename,'r').read().splitlines()
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;