gpt4 book ai didi

python - CSV Writer 在 Excel 2013 中按顺序截断字符

转载 作者:行者123 更新时间:2023-11-30 22:45:12 28 4
gpt4 key购买 nike

我对 Python 的 csv 模块有一个有趣的情况。我有一个函数,可以从文本文件中获取特定行并将它们写入 csv 文件:

import os
import csv

def csv_save_use(textfile, csvfile):
with open(textfile, "rb") as text:
for line in text:
line=line.strip()
with open(csvfile, "ab") as f:
if line.startswith("# Online_Resource"):
write = csv.writer(f, dialect='excel',
delimiter='\t',
lineterminator="\t",
)
write.writerow([line.lstrip("# ")])

if line.startswith("##"):
write = csv.writer(f, dialect='excel',
delimiter='\t',
lineterminator="\t",
)
write.writerow([line.lstrip("# ")])

以下是原始文本文件中的一些字符串示例:

# Online_Resource: https://www.ncdc.noaa.gov/
## Corg% percent organic carbon,,,%,,paleoceanography,,,N

真正奇怪的是最终的 csv 文件看起来不错,除了第一列中的字符(最初带有 # 的字符)在我尝试手动删除某些字符时部分“覆盖”彼此单元格中的字符:

Result

也奇怪的是,似乎没有公式可以说明每次我在运行脚本后尝试删除一些字符时字符如何变得困惑。我尝试将 csv 文件编码为 un​​icode,但无济于事。

谢谢。

最佳答案

您选择了 Excel 方言,但使用奇怪的参数覆盖了它:

  • 您使用 TAB 作为分隔符行终止符,这将创建一个 1 行 CSV 文件。离我足够近,可以“截断”
  • 此外,quotechar 不应该是空格。

正如您所指出的,这传达了一个很好的副作用:csv 模块实际上根据逗号分割行!

该代码效率低下且容易出错:您在循环中以追加模式打开文件,并每次都创建一个新的 csv 编写器。最好在循环之外完成。

此外,逗号分割现在必须手动完成。更好的是:也使用 csv 模块来读取文件。我对您日常工作的修复建议:

import os
import csv

def csv_save_use(textfile, csvfile):
with open(textfile, "rU") as text, open(csvfile, "wb") as f:
write = csv.writer(f, dialect='excel',
delimiter='\t')
reader = csv.reader(text, delimiter=",")
for row in reader:
if not row:
continue # skip possible empty rows
if row[0].startswith("# Online_Resource"):
write.writerow([row[0].lstrip("# ")])

elif row[0].startswith("##"):
write.writerow([row[0].lstrip("# ")]+row[1:]) # write row, stripping the first item from hashes

请注意,除非删除delimiter='\t(恢复为默认逗号),否则文件无法在 Excel 中正确显示

另请注意,您需要将 open(csvfile, "wb") as f 替换为 open(csvfile, "w",newline='') as f适用于 Python 3。

现在的输出如下(请注意,空单元格是因为连续有多个逗号)

enter image description here

关于python - CSV Writer 在 Excel 2013 中按顺序截断字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41250317/

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