将文本文件重新格式化为包含 python 中两个不同分隔符的 csv

Reformat text file to csv that includes two different delimiter in python

我有一个如下所示的文本文件:

A+B,item_1,item_2
C+D,item_3,item_4
E+F+G,item_5,item_6,item_7

我正在尝试使用 python 将其重新格式化为 csv 文件,具体顺序如下:

B,item_1
A,item_2
D,item_3
C,item_4
G,item_5
F,item_6
E,item_7

我如何在 python 中执行此操作?

已编辑:

我尝试过很多不同的东西,下面是一个例子:

from sys import argv
import re

script, input_file = argv

with open(input_file) as x:
    text = x.read()
    split_text = re.split('\+|\n|,', text)

def split_list(y)
    half_text  = len(y)/2
    return y[:half], y[half:]

def(split_text)

我试图以不同的方式拆分列表,然后将其写到输出文件中。但由于列表大小的可变性,我什至没有接近我想要的。所以我之前没有 post 我的试用代码,因为我什至不确定我应该以什么方式处理它。感谢阅读!

这将是一种解决方法:

lines = ["A+B,item_1,item_2","C+D,item_3,item_4"]
f = open("test.txt","w+")

def new_line(line):
    prt = line.strip().split(',')
    f.write(str(prt[0].split('+')[0]) + ',' + str(prt[1]) + '\n')
    f.write(str(prt[0].split('+')[1]) + ',' + str(prt[2]) + '\n')

map(new_line,lines)
f.close()

假设您的数据在一个名为 input.csv 的文件中并且字段数与 headers

的数量相匹配
#!/usr/bin/python2.7

import csv

file_name='input.csv'

with open(file_name,'rb') as csvfile:
  my_reader = csv.reader(csvfile,delimiter=',')
  for row in my_reader:
   row_length=len(row)
   if row_length:
    columns = row[0].split('+')
    num_columns = len(columns)
    for i in range(num_columns):
        print "%s,%s" % (columns[i],row[i+1])

您应该使用 csv 模块,因为它负责任何转义。 然后它可以用python方式实现为

import csv, sys

writer = csv.writer(sys.stdout)

for row in csv.reader(sys.stdin):
  writer.writerows(zip(reversed(row[0].split('+')), row[1:]))

适用于更新后的示例。

这里有一个相当简洁的方法:

import csv
import sys

input_file, output_file = sys.argv[1:3]

with open(input_file, 'rb') as inp_f, open(output_file, 'wb') as out_f:
    csv_writer = csv.writer(out_f)
    for row in csv.reader(inp_f):
        try:
            csv_writer.writerows(
                item for item in zip(reversed(row[0].split('+')), row[1:]))
        except IndexError:
            print 'bad row encountered', row
            raise

之后output_file的内容:

B,item_1
A,item_2
D,item_3
C,item_4
G,item_5
F,item_6
E,item_7