所以我有以下数据源(“/”表示制表符分隔的语言环境),我想把它变成JSON格式。数据没有标题,我希望能够为名称,学位,区域(CEP),电话号码,电子邮件和网址插入一个。不确定包含多个变量的第一列是否可行。
有关如何插入标题然后解析第一列的任何建议? csv模块具有“has_header”功能,但我想插入标题。
Rxxxx G. Axxxx M.A.T., xxx 561-7x0-xxx rxxxxx@xxxx.com www.txxxx.com
Pxxxx D. Axxxx Ed.M.
xxxxx D. xxxx Ed.M. 413-xxx-xxxx xxxx@gmail.com www.pxxxxt.com
xxxxx xxxx xxxxx M.S.
xxx xxx xxxxxx M.S.
xxxxxx R. xxxxx M.B.A.
xxxxxx xxxxxx M.A.Ed., CEP
我试过了:
echo $'name\ phone\ email\ url' | cat - IECA_supplement_output.txt > ieca_supp_output.txt
但这不起作用。它只是给了我'名字\电话......'在tope,然后是下面的数据。标题不由tab.s分隔。
答案 0 :(得分:1)
首先确保分隔符真的是你的想法。您可以通过使用openoffice打开文件或编写python函数来使用正则表达式(re模块)检测分隔符来检查这一点。还要确保行以“/ n”或Windows样式(附加r)结尾。
标题只不过是第一行。所以在python中打开文件,读取所有行。将标题字符串(由 / t分隔为制表符分隔符)添加到第一行。将行写回文件。 而已。
答案 1 :(得分:1)
要在python中执行此操作,您可以尝试读取每一行(随时修复数据),然后编写一个固定的Tab Separated Value文件,其标题如下:
import csv
rows = []
with open('rawdata.txt') as f:
row = ['']
for line in f.readlines():
data = line.rstrip().split('\t')
if len(data) > 1:
row[0] += data[0]
row.extend(data[1:])
rows.append(row)
row = ['']
else:
row[0] += data[0] + ' '
with open('data.csv', 'wb') as o:
file_writer = csv.writer(o, delimiter='\t')
file_writer.writerow(['Name','Phone','EMail','URL'])
for row in rows:
file_writer.writerow(row)
这会将以下数据文件作为输入:
rawdata.txt:
Rxxxx G. Axxxx M.A.T., xxx 561-7x0-xxx rxxxxx@xxxx.com www.txxxx.com
Pxxxx D. Axxxx Ed.M.
xxxxx D. xxxx Ed.M. 413-xxx-xxxx xxxx@gmail.com www.pxxxxt.com
xxxxx xxxx xxxxx M.S.
xxx xxx xxxxxx M.S.
xxxxxx R. xxxxx M.B.A.
xxxxxx xxxxxx M.A.Ed., CEP 415-xxx-xxxx xxx@compuserve.net www.hxxxxxl.com
此代码假定文件的最后一行符合“名称,电话号码,电子邮件和网站”的理想格式,否则将以静默方式删除最后“不完整”的行。当它读取每一行时,它会查看是否有足够的列来满足有效行。如果没有,它会将名称列附加到变量并继续读取,如果它接受名称列并将其与联系信息组合并将其附加到名为rows
的数组中。读完输入后,它会使用Pythons csv
模块在追加标题行后写入数据。
答案 2 :(得分:0)
可能有一种优雅的编程方法来实现这一点,但我使用的方法是使用'tab'作为分隔符打开excel中的.txt文件。打开文件后,我只需将列标题输入第一行。小菜一碟! :)