在Python中,调用
temp = open(filename,'r').readlines()
的结果是一个列表,其中的每个元素都是文件中的一个行。这有点傻,但仍然是:readlines()
也会给每个元素写入换行符,这是我不希望发生的。
我怎样才能避免这种情况呢?
你可以使用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
的精确副本。
另一个例子。
每次只读一行文件。
从字符串末尾删除不需要的字符 [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)
试试这个。
u=open("url.txt","r")
url=u.read().replace('\n','')
print(url)
去掉所有的前导和尾部的空格(灵感来自 [Абага'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.如果你觉得对你有帮助,那么也请你给他加注。
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;