如何将标题插入制表符分隔文件?

时间:2013-07-01 16:55:37

标签: python

所以我有以下数据源(“/”表示制表符分隔的语言环境),我想把它变成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

This is a similar post

我试过了:

echo $'name\ phone\ email\ url' | cat - IECA_supplement_output.txt > ieca_supp_output.txt

但这不起作用。它只是给了我'名字\电话......'在tope,然后是下面的数据。标题不由tab.s分隔。

3 个答案:

答案 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文件。打开文件后,我只需将列标题输入第一行。小菜一碟! :)