我正在尝试使用csv.reader()将txt文件(逗号分隔符)读取为CSV文件。但是因为我的定界符(,)有时位于对象/项目中,所以读取项目的整个“行”都会移动。
示例:
input.txt:
Stevenson Corp, 123 Main St, 3 employees\n
Johnson Inc, 456 Main St, 5 employees\n
会导致CSV列为:
Stevenson Corp | 123 Main St | 3 employees
Jonson Inc | 456 Main St | 5 employees
但是,如果我的input.txt文件在要分隔的项目中包含(,),则会出现问题,例如:
input_bad.txt:
Stevenson Corp, 123 Main St, 3 employees\n
Johnson, Inc, 456 Main St, 5 employees\n #notice the comma before Inc
将导致错误的CSV列为:
Stevenson Corp | 123 Main St | 3 employees #3 columns
Jonson | Inc | 456 Main St | 5 employees #4 columns (issue)
我想不出任何解决方案,以使Jonson,Inc保持不被“,”分隔符分开。
我的代码如下打开txt文件和csv:
inputfile = open(os.path.join(somelocation, somefile.txt), "r", encoding="utf-8", errors="replace")
csv_data = csv.reader(inputfile, delimiter = ",")
请帮助。
答案 0 :(得分:0)
最好的方法是返回并将文件中的定界符从,
更改为更明智的方法,但是如果这不是一种选择,那么您可以执行以下操作来解决此问题:
import csv
with open(os.path.join(somelocation, somefile.txt), "r", encoding="utf-8", errors="replace") as inputfile:
spamreader = csv.reader(inputfile, delimiter='¬')
for row in spamreader:
new_row = row.rsplit(",", 2)
print("|".join(new_row))
这使用了文本中未出现的delimer,因此不会拆分任何行(因此您可以使用inputfile.readlines()
进行阅读),然后使用rsplit
拆分最右边的两个逗号创建列