在Python中,调用
temp = open(filename,'r').readlines()
产生一个列表,其中每个元素都是文件中的一行。它有点愚蠢但仍然:readlines()
也为每个元素写了换行符,这是我不希望发生的。我怎么能避免呢?
答案 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;