【发布时间】:2022-01-22 21:16:58
【问题描述】:
您好,我正在尝试使用 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。
【问题讨论】:
-
你真的不应该在文本文件中混用
CRLF和LF。使用一个,或另一个。您的输入文件实际上已经损坏。如果您为其创建此文件的系统由于某种原因无法处理CRLF,那么您最好的选择可能是一直使用LF。 -
@Tomalak 问题是我没有混合它。这是我在将文件保存为 CSV 文件后从 Microsoft Excel 中得到的。
-
有趣,我从来不知道!但我可以重现它,Excel 也只为我保存
LF。更改后留在CRLF会造成什么麻烦? (Excel 本身不会被它弄糊涂,它对我来说打开两个文件都很好。) -
@Tomalak 我已经编辑了问题并添加了我在 Google Docs Excel 中得到的内容的屏幕。每行以
CRLF结尾的单元格中的空白行:)
标签: python csv csvreader csvwriter