gpt4 book ai didi

python - 如何在已经包含文本的行上将字典写入 CSV 文件?

转载 作者:太空宇宙 更新时间:2023-11-04 04:39:28 24 4
gpt4 key购买 nike

我正在使用 python 3.6.0。我之前已经将字典写入 CSV 文件,但从来没有在已经包含文本的行上。我现在遇到麻烦了。这是我的代码:

import csv

f='/Users/[my name]/Documents/Webscraper/tests/output_sheet_1.csv'
bigdict = {'ex_1': 1, 'ex_2': 2, 'ex_3': 3}
with open(f, 'r+') as file:
fieldnames=['ex_1','ex_2','ex_3']
writer = csv.DictWriter(file, fieldnames=fieldnames,delimiter=',')
if '\n' not in file.readline()[-1]:
file.write('\n')
writer.writerow(bigdict)

当我运行它时,python 将字典附加到包含字段名的行之后的第一行,从字段名下方的最后一个单元格开始。换句话说,第一行包含许多条目,包括 ex_1 , ex_2 , 和 ex_3在最后三个单元格中。在第二行中,我将值存储在所有单元格中,但 ex_1 下的单元格除外。 , ex_2 , 和 ex_3 , 都是空白的。 Python 写入整数 1下面ex_3 , 并写入 23在它右侧的单元格中。

我想重新定位它们,以便每个数字都位于它们各自的字段名单元格下。我该怎么做,为什么会这样?谢谢。

最佳答案

你有两个问题:

  1. 如果没有文件(或文件为空),您可能希望添加一个标题行。

  2. 如果您要向现有文件追加新行,则您要尝试确保文件中的最后一个字符是换行符。 writerow() 将添加尾随换行符,因此通常这不会成为问题。但是,如果文件已被手动编辑并且尾随换行符丢失,这将导致新行附加到最后一行的末尾。

第一个问题可以通过先测试文件的大小来解决。如果它是 0 那么它存在但是是空的。如果该文件不存在,则会引发 OSError 异常。 write_header 用于发出此信号。

第二个问题有点棘手。如果以二进制模式打开文件,则可以查找到文件的最后一个字节并将其读入。这可以检查它是否是换行符。如果您的文件曾经使用过另一种编码,则需要进行更改。然后可以在追加模式下重新打开文件并写入新行。

这一切都可以按如下方式完成:

import csv

filename = '/Users/[my name]/Documents/Webscraper/tests/output_sheet_1.csv'
bigdict = {'ex_1': 1, 'ex_2': 2, 'ex_3': 3}

# Does the file exist? If not (or it is empty) write a header
try:
write_header = os.path.getsize(filename) == 0
except OSError:
write_header = True

# If the file exists, does it end with a newline?
if write_header:
no_ending_newline = False
else:
with open(filename, 'rb') as f_input:
f_input.seek(-1, 2) # move to the last byte of the file
no_ending_newline = f_input.read() != b'\n'

with open(filename, 'a', newline='') as f_output:
fieldnames = ['ex_1','ex_2','ex_3']
csv_writer = csv.DictWriter(f_output, fieldnames=fieldnames)

if write_header:
csv_writer.writeheader()

if no_ending_newline:
f_output.write('\n')

csv_writer.writerow(bigdict)

关于python - 如何在已经包含文本的行上将字典写入 CSV 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50979628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com