我正在try 创建一个(或两个)模块来将文件从dat转换为csv,然后再转换回来.我遇到的问题是,转换会向数据的每个"单元格"添加许多引号.

我目前使用以下代码来完成此操作:

with open(file_dat_new, 'r') as dat_file:
    with open(file_csv_new, 'w', newline='') as csv_file:
        csv_writer = csv.writer(csv_file)
        for row in dat_file:
            row = [value.strip() for value in row.split(',')]
            csv_writer.writerow(row)

以下是第一行输入的示例:

"TOA5","STA332","CR6","10318","CR6.Std.12.02 CR6-WIFI.05.03","CPU:Sta-332_2022-10-03.cr6","3367","FSDATA"

我得到的结果是:

"""""""TOA5""""""","""""""STA332""""""","""""""CR6""""""","""""""10318""""""","""""""CR6.Std.12.02 CR6-WIFI.05.03""""""","""""""CPU:Sta-332_2022-10-03.cr6""""""","""""""3367""""""","""""""FSDATA"""""""

所以我的问题是:为什么要添加额外的引号,以及如何在转换时删除它们?

推荐答案

当我按原样运行您的程序时,得到的是:

"""TOA5""","""STA332""","""CR6""","""10318""","""CR6.Std.12.02 CR6-WIFI.05.03""","""CPU:Sta-332_2022-10-03.cr6""","""3367""","""FSDATA"""

这看起来没有你们分享的结果那么极端:

"""""""TOA5""""""","""""""STA332""""""","""""""CR6""""""","""""""10318""""""","""""""CR6.Std.12.02 CR6-WIFI.05.03""""""","""""""CPU:Sta-332_2022-10-03.cr6""""""","""""""3367""""""","""""""FSDATA"""""""

当我将DAT文件视为CSV时:

with open("input.dat", newline="") as f:
    reader = csv.reader(f)
    rows = list(reader)

with open("output.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(rows)

然后我得到了:

TOA5,STA332,CR6,10318,CR6.Std.12.02 CR6-WIFI.05.03,CPU:Sta-332_2022-10-03.cr6,3367,FSDATA

您的样例DAT文件是一个带有引号字段的CSV.通常,使用外引号是为了保护字段数据中的逗号,或保护字段数据中的另一个双引号.一些程序会写出双引号,即使它们不是必需的(比如您的样本数据).

当您try 自己解析DAT文件(逗号分开)时,您留下了引号,当您将引号传递给csv.Writer时,引号得到quoted.

对我来说,如果输入看起来有点像csv,我会将其视为csv并使用csv.ader.

如果我将程序的输出作为输入发回,then I get the more extreme quoting you shared:

"""""""TOA5""""""","""""""STA332""""""","""""""CR6""""""","""""""10318""""""","""""""CR6.Std.12.02 CR6-WIFI.05.03""""""","""""""CPU:Sta-332_2022-10-03.cr6""""""","""""""3367""""""","""""""FSDATA"""""""

引用将双引号转换为数据,如下所示:

['"Foo, Bar"', 'Baz']

进入此CSV:

"""Foo, Bar""",Baz

一组双引号将该字段标记为quoted,然后每个双引号即数据(")变为"".

因此,"TOA5"变成了"""TOA5"""(外部有一组双引号,然后两个双引号中的每一个都变成了双引号).再运行一次,我们得到"""""""TOA5"""""""(外部有一组双引号,然后六个双引号中的每一个数据都是双引号).

Python-3.x相关问答推荐

一种基于绝对排序值的极框索引和列定位的Python方法

为什么vs code返回错误—LocaleError:int对象没有属性where,但相同的代码运行在Google Colab上没有任何问题''''

Numpy argmin()以查找最近的元组

Pyvis和Networkx:如何根据源或目标使 node colored颜色 不同

如何从选定的html内容中获取所需的文本

Pandas 根据条件增加Dataframe列

为什么我在BLE中的广告代码在发送包裹之间需要大约1秒

如何强调您正在寻求以 pandas 数据帧的另一列为条件的差异?

Heroku 中的未知错误代码缺少一个或多个参数

错误:无法为 pyconcorde 构建轮子,这是安装基于 pyproject.toml 的项目所必需的

Python (pandas) - 判断一个 df 中的值是否在另一个(不相等)df 中的任何对之间

如何在 histplot 中标记核密度估计

Python 3 `str.__getitem__` 的计算复杂度是多少?

如何在 django 中没有循环的情况下获得前键的前键?

将名字转换成姓氏、首字母和中间字母的格式

将变量传递给 Google Cloud 函数

为什么 List 不能包含多种类型?

multiprocessing.Queue 中的 ctx 参数

TensorFlow:dataset.train.next_batch 是如何定义的?

pdfminer python 3.5