如何读取没有换行符的文件?
- 2024-11-22 08:47:00
- admin 原创
- 143
问题描述:
在 Python 中,调用 egtemp = open(filename,'r').readlines()
会生成一个列表,其中每个元素都是文件中的一行。但是,这些字符串末尾有一个换行符,这是我不想要的。
我怎样才能获取没有换行符的数据?
解决方案 1:
您可以使用以下命令读取整个文件并分割行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) != '
':
# add missing newline if not already present
f.write('
')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
或者一个更简单的替代方法是使用strip
换行符:
[line.rstrip('
') for line in file]
甚至,尽管很难读懂:
[line[:-(line[-1] == '
') 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())
`f`f2
解决方案 2:
temp = open(filename,'r').read().split('
')
解决方案 3:
每次读取文件一行。使用 从字符串末尾删除不需要的字符str.rstrip(chars)
。
with open(filename, 'r') as fileobj:
for row in fileobj:
print(row.rstrip('
'))
另请参阅str.strip([chars])
和str.lstrip([chars])
。
解决方案 4:
我认为这是最好的选择。
temp = [line.strip() for line in file.readlines()]
解决方案 5:
temp = open(filename,'r').read().splitlines()
解决方案 6:
我喜欢的一句话 -- 如果你不算的话from pathlib import Path
:)
lines = Path(filename).read_text().splitlines()
这会自动关闭文件,不需要with open()...
在 Python 3.5 中添加。
https://docs.python.org/3/library/pathlib.html#pathlib.Path.read_text
解决方案 7:
尝试一下:
u=open("url.txt","r")
url=u.read().replace('
','')
print(url)
解决方案 8:
您可以使用列表推导轻松地将文件读取为列表
with open("foo.txt", 'r') as f:
lst = [row.rstrip('
') for row in f]
解决方案 9:
使用pathlib.Path.read_text(),以文本模式打开文件,读取并关闭文件。
from pathlib import Path
temp = Path(filename).read_text()
解决方案 10:
要删除尾随的行尾 ( /n
) 字符和空列表值 ( ''
),请尝试:
f = open(path_sample, "r")
lines = [line.rstrip('
') for line in f.readlines() if line.strip() != '']
f.close()
解决方案 11:
如果您仍想使用readline()
,您可以在阅读每行时删除换行符。这看起来既直观又符合 Python 风格(至少对我来说)。
file = open("foo", "r")
aLineOfText = file.readLine().strip('
')
如果必须读取多行,请将其放入循环中。如果文件太大而无法一次性读入内存,这是一个很好的解决方法。
解决方案 12:
我认为最直接的解决方案是调用splitlines()
文件对象上的函数。
这是您的代码的修改:
temp = open(filename,'r').read().splitlines()
这将以字符串形式返回文件中所有行的列表,每行在 处换行`
`。本质上,它将消除所有换行符。
参考:
https://docs.python.org/3.11/library/stdtypes.html#str.splitlines
解决方案 13:
my_file = open("first_file.txt", "r")
for line in my_file.readlines():
if line[-1:] == "
":
print(line[:-1])
else:
print(line)
my_file.close()
解决方案 14:
此处的脚本将从文件中取出行,并将每行(不带换行符)以,0结尾保存在file2中。
file = open("temp.txt", "+r")
file2 = open("res.txt", "+w")
for line in file:
file2.writelines(f"{line.splitlines()[0]},0
")
file2.close()
如果你看一下行,这个值是data\n,所以我们把splitlines()
使其成为一个数组,[0]选择唯一的字数据
解决方案 15:
import csv
with open(filename) as f:
csvreader = csv.reader(f)
for line in csvreader:
print(line[0])
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)