遍历并行列表并将一个列表中的制表符分隔文本转换为另一个列表中的 csv 路径
Posted
技术标签:
【中文标题】遍历并行列表并将一个列表中的制表符分隔文本转换为另一个列表中的 csv 路径【英文标题】:Iterate through parallel lists and convert tab delimited text in one list to csv path in other 【发布时间】:2018-07-31 14:34:10 【问题描述】:我目前正在寻找构建一个脚本,该脚本采用 .txt 文件(制表符分隔)并将它们转换为 .csv。运行以下代码时,我收到错误消息(需要一个类似字节的对象,而不是“str”)。完成此操作的最佳方法是什么?
import csv
import itertools
txt_file_P_T = r"mytxt_P_T.txt"
txt_file_P_C = r"mytxt_P_C.txt"
txt_file_S_T = r"mytxt_S_T.txt"
txt_file_S_C = r"mytxt_S_C.txt"
csv_file_P_T = r"mycsv_P_T.csv"
csv_file_P_C = r"mycsv_P_C.csv"
csv_file_S_T = r"mycsv_S_T.csv"
csv_file_S_C = r"mycsv_S_C.csv"
text_list = [txt_file_P_T, txt_file_P_C, txt_file_S_T, txt_file_S_C]
csv_list = [csv_file_P_T, csv_file_P_C, csv_file_S_T, csv_file_S_C]
for i, j in zip(text_list, csv_list):
in_txt = csv.reader(open(i, "rt"),)
out_csv = csv.writer(open(j, 'wb'))
out_csv.writerows(in_txt)
【问题讨论】:
将csv.writer(open(j, 'wb'))
中的wb
更改为w
python 3.5: TypeError: a bytes-like object is required, not 'str' when writing to a file的可能重复
@pault: 不完全是重复的: csv 写入器需要模式文本,但也必须提供 endline=''
。
【参考方案1】:
csv
模块在 Python2 和 Python3 之间发生了重大变化。在 Python2 中,csv writer 的底层文件对象应该以二进制模式打开。在 Python3 中,它应该以文本模式打开(允许指定显式编码)并使用 newline = ''
参数来避免任何行尾转换。
所以你应该有:
...
for i, j in zip(text_list, csv_list):
in_txt = csv.reader(open(i))
out_csv = csv.writer(open(j, 'w', newline = ''))
out_csv.writerows(in_txt)
【讨论】:
以上是关于遍历并行列表并将一个列表中的制表符分隔文本转换为另一个列表中的 csv 路径的主要内容,如果未能解决你的问题,请参考以下文章
使用 OpenOffice Calc 打开 Excel 文件并转换为 CSV 或制表符分隔