【问题标题】: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”吗?
  • @Prune 我认为你在这里有点过分了,从代码和描述中可以清楚地看出他们试图做什么......

标签: python python-3.x


【解决方案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)

【讨论】:

  • 啊,我刚看到这个。这非常非常接近,但我想覆盖每个文件中的内容,而不是将更改附加到每个文件的底部。如何打开每个文件,替换几个字符串,只写入每个文件的更改,而不包括每个文件的原始内容?谢谢。
  • 是的,就是这样!非常感谢!!
【解决方案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!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2014-02-13
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多