0

您好我正在尝试使用csv库将我的 CSV 文件转换为新文件。

我写的代码如下:

import csv
import re

file_read=r'C:\Users\Comarch\Desktop\Test.csv'
file_write=r'C:\Users\Comarch\Desktop\Test_new.csv'

def find_txt_in_parentheses(cell_txt):
    pattern = r'\(.+\)'
    return set(re.findall(pattern, cell_txt))

with open(file_write, 'w', encoding='utf-8-sig') as file_w:
    csv_writer = csv.writer(file_w, lineterminator="\n")
    with open(file_read, 'r',encoding='utf-8-sig') as file_r:
        csv_reader = csv.reader(file_r)
        for row in csv_reader:
            cell_txt = row[0]
            txt_in_parentheses = find_txt_in_parentheses(cell_txt)
            if len(txt_in_parentheses) == 1:
                txt_in_parentheses = txt_in_parentheses.pop()
                cell_txt_new = cell_txt.replace(' ' + txt_in_parentheses,'')
                cell_txt_new = txt_in_parentheses + '\n' + cell_txt_new
                row[0] = cell_txt_new
            csv_writer.writerow(row)

唯一的问题是在生成的文件(Test_new.csv文件)中,我有CRLF而不是LF. 这是一个示例图像:

  • 读取左侧文件
  • 在右侧写入文件:

在此处输入图像描述

结果,当我将 csv 列复制到 Google docs Excel 文件中时,我在每一行之后都得到一个空行,带有CRLF.

在此处输入图像描述

是否可以使用csv库来编写我的代码,以便将LF其留在单元格中而不是CRLF.

4

2 回答 2

1

文档csv.reader

如果csvfile是一个文件对象,它应该用newline=''1
[...]

脚注

1(1,2) 如果newline=''未指定,则嵌入在引用字段中的换行符将不会被正确解释,并且在使用\r\nlinendings on write 的平台\r上将添加额外的。指定 应该始终是安全的newline='',因为 csv 模块自己(通用)换行符处理。

这正是您所看到的问题。所以...

with open(file_read, 'r', encoding='utf-8-sig', newline='') as file_r, \
     open(file_write, 'w', encoding='utf-8-sig', newline='') as file_w:
     
    csv_reader = csv.reader(file_r, dialect='excel')
    csv_writer = csv.writer(file_w, dialect='excel')

    # ...
于 2021-12-22T13:50:19.600 回答
0

您在 Windows 上,并以“w”模式打开文件——这为您提供了 Windows 样式的行尾。使用模式 'wb' 应该会给你首选的行为。

于 2021-12-21T13:27:25.183 回答