将文本文件重新格式化为包含 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
我有一个如下所示的文本文件:
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