line.strip()方法澄清
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了line.strip()方法澄清相关的知识,希望对你有一定的参考价值。
语言:python(版本:3.7.3)熟练程度:新手
我想删除文件每行中的所有前导和尾随空格。因此我使用了in-build方法'strip()'来完成这项工作,但我的代码从文件底部开始执行,导致文件中的行重复。任何援助对实现目标都非常有帮助。
我的代码如下:
class filecorrection:
def removeLeadingandTrailingSpacesinaFile(self, fromFile):
with open(fromFile, 'r+') as file:
lines = file.readlines()
for line in lines:
file.write(line.strip() + "
")
cm = filecorrection()
cm.removeLeadingandTrailingSpacesinaFile("filepath")
我试图使用搜索方法将指针放在文件的开头,但没有得到完美的输出。
class filecorrection:
def removeLeadingandTrailingSpacesinaFile(self, fromFile):
with open(fromFile, 'r+') as file:
lines = file.readlines()
**file.seek(0)**
for line in lines:
file.write(line.strip() + "
")
cm = filecorrection()
cm.removeLeadingandTrailingSpacesinaFile("filepath")
预期:(删除尾随和前导空格)
<book id="bk105">
<author>Corets, Eva</author>
<title>The Sundered Grail</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>testing</publish_date>
</book>
实际:
<book id="bk105">
<author>Corets, Eva</author>
<title>The Sundered Grail</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>testing</publish_date>
</book><book id="bk105">
<author>Corets, Eva</author>
<title>The Sundered Grail</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>testing</publish_date>
</book>
答案
您可以像这样打开文件两次
class filecorrection:
def removeLeadingandTrailingSpacesinaFile(self, fromFile):
lines = []
with open(fromFile, 'r') as file:
lines = file.readlines()
with open(fromFile, "w") as file:
for line in lines:
file.write(line.strip() + "
")
cm = filecorrection()
cm.removeLeadingandTrailingSpacesinaFile("test.xml")
而不是试图同时读取和写入文件。以写入模式(w
)打开文件会将文件截断为零长度并从头开始写入。
另一答案
代码问题:
- 您正在尝试写入相同的输入文件。
还尝试对您阅读的行和您创建的新行使用不同的变量。这是一个很好的做法。
请参阅下面的更新代码
with open(fromFile, 'r+') as infile,
open(writeFile, 'w') as outfile:
for line in infile:
new_line = line.rstrip('
').strip()
#now write the new line to out file
outfile.write(new_line + "
")
另一答案
您可以使用另一个文件来存储中间结果,然后用它替换原始文件。在这里,您正在阅读和写入同一个文件。
import pathlib
import shutil
class filecorrection:
def removeLeadingandTrailingSpacesinaFile(self, fromFile):
parent_path=pathlib.Path(fromFile).parent
# Make sure you have permissions to create a file. If not
# you can save intermediate results in memory instead.
temp_file = str(parent_path / "temp_file")
with open(fromFile, 'r+') as file, open(temp_file, 'w+') as temp:
for line in file:
temp.write(line.strip()+"
")
shutil.move(temp_file, fromFile)
cm = filecorrection()
cm.removeLeadingandTrailingSpacesinaFile('file.txt')
以上是关于line.strip()方法澄清的主要内容,如果未能解决你的问题,请参考以下文章
python 2.7 使用xlsxwriter模块写入excel文件数据时,左上角出现绿色的小三角符号,无法生成表格怎么办?