如何打开文件、替换一些字符串并将更新保存到同一个文件?

Posted

技术标签:

【中文标题】如何打开文件、替换一些字符串并将更新保存到同一个文件?【英文标题】:How to open a file, replace some strings, and save updates to the same file? 【发布时间】:2019-04-05 23:43:07 【问题描述】:

我正在尝试遍历目录中的所有 CSV 文件,进行查找/替换,然后将结果保存到同一个文件(同名)。看起来这应该很容易,但我似乎在这里遗漏了一些东西。这是我正在使用的代码。

import glob
path = 'C:\\Users\\ryans\\OneDrive\\Desktop\\downloads\\Products\\*.csv'
for fname in glob.glob(path):
    print(str(fname))
    with open(str(fname), "w") as f:
        newText = f.read().replace('|', ',').replace(' ', '')
        f.write(newText)

我遇到了下面的链接,并尝试了其中列出的概念,但到目前为止没有任何效果。

How to open a file for both reading and writing?

【问题讨论】:

Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。 不作为答案发布,因为它不使用 Python,但如果你有 Windows 的 cygwin 或 bash,你可以通过 sed 使用 -i 标志来实现这一点。 你可以尝试在打开文件时使用“r+”而不是“w”吗? How to open a file for both reading and writing?的可能重复 @Prune 我认为你在这里有点过分了,从代码和描述中可以清楚地看出他们试图做什么...... 【参考方案1】:

您需要使用'r+' 而不是'w' 打开文件。见下文:

import glob
path = 'C:\\Users\\ryans\\OneDrive\\Desktop\\downloads\\Products\\*.csv'
for fname in glob.glob(path):
    print(str(fname))
    with open(str(fname), "r+") as f:
        newText = f.read().replace('|', ',').replace(' ', '')
        f.write(newText)

【讨论】:

啊,我刚看到这个。这非常非常接近,但我想覆盖每个文件中的内容,而不是将更改附加到每个文件的底部。如何打开每个文件,替换几个字符串,只写入每个文件的更改,而不包括每个文件的原始内容?谢谢。 查看这篇文章:***.com/questions/2424000/… 是的,就是这样!非常感谢!!【参考方案2】:

这是最终(工作)解决方案。

import glob
import fileinput
path = 'C:\\Users\\ryans\\OneDrive\\Desktop\\downloads\\Products\\*.csv'
for fname in glob.glob(path):
    #print(str(fname))
    with open(fname, 'r+') as f:
        text = f.read().replace(' ', '')
        f.seek(0)
        f.write(text)
        f.truncate()

感谢您的提示,agaidis!

【讨论】:

以上是关于如何打开文件、替换一些字符串并将更新保存到同一个文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在一列字符串中找到特定的数字模式并将该值替换为该序数的文本版本?

LINQ to XML - 更新节点并将其保存到 XML 文件

如何从 JTextField 获取字符串并将其保存在变量中的更新?

使用 JMeter,如何从 API 的响应正文中提取字符串并将其保存到 csv 文件?

txt文本文档打开全都是乱码

更新到项目后,在play store中替换apk文件