python - 替换文件中最后一个字符的简单方法?

标签 python file-io

我只想替换文件中的最后一个字符。原因是因为当我写入我的文件时,在我写入文件的最后一点,最后包含一个额外的 , 。我只是不想在最后写那个 ,,而是希望尽可能用 ] 替换它。这是我的尝试:

reader = csv.DictReader(open(restaurantsCsv), delimiter=';')
  with open(fileName, 'w+') as textFile:
    textFile.write('[')
    for row in reader:
      newRow = {}
      for key, value in row.items():
        if key == 'stars_count' or key == 'reviews_count':
          newRow[key] = float(value)
        else:
          newRow[key] = value
      textFile.write(json.dumps(newRow) + ',')
    textFile.seek(-1, os.SEEK_END)
    textFile.truncate()
    textFile.write(']')

在我到达 textFile.seek(-1, os.SEEK_END) 之前一切正常,我想在其中查找文件的末尾并且我想删除最后一个 在文件中,但我收到一条错误消息,提示 io.UnsupportedOperation: can't do nonzero end-relative seeks。因此,我使用 wb+ 参数打开我的文件,但如果我这样做,那么我只能将字节写入我的文件,而不能写入字符串。有什么方法可以简单地将文件中的最后一个字符替换为 ] 而不是 ,?我知道我可以简单地打开文件进行读取,截断文件,然后再次打开文件以写入最后的 ] 但这似乎效率低下(如此处所示):

   with open(filename, 'rb+') as filehandle:
     filehandle.seek(-1, os.SEEK_END)
     filehandle.truncate()

   with open(filename, 'a') as filehandle:
    filehandle.write(']')

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

您可以稍微修改您的方法,而不是在每行的末尾附加一个逗号,您只需在除第一行之外的每一行前加上一个逗号:

reader = csv.DictReader(open(restaurantsCsv), delimiter=';')

with open(fileName, 'w+') as text_file:
    text_file.write('[')

    for index, row in enumerate(reader):
        new_row = {}

        for key, value in row.items():
            if key in ('stars_count', 'reviews_count'):
                new_row[key] = float(value)
            else:
                new_row[key] = value

        if index != 0:
            text_file.write(',')

        text_file.write(json.dumps(new_row))

    text_file.write(']')

关于python - 替换文件中最后一个字符的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40836414/

相关文章:

python - 使用分隔符拆分列表

java - Files#delete(Path) 和 File#delete() 之间的区别

java - 如何通过java读取文件名、定位并打开它

java - 如何从 InputStream 获取 Java 文件的绝对路径?

c# - 在 C# 中创建自定义文件属性

python - kmeans聚类后如何在图像上绘制质心?

python - numpy:将二维数组乘以一维数组

python - 如何在打印函数中定义变量?

python - 如何在 Python 2.6 中升级 sqlite3 包?

c# - 从代码执行时 Handle.exe 不工作