1

所以我有以下数据源(“/”代表制表符分隔的语言环境),我想把它变成 JSON 格式。数据没有标题,我希望能够为姓名、学位、地区 (CEP)、电话号码、电子邮件和 URL 插入一个。不确定这对于包含多个变量的第一列是否可行。

关于如何插入标题然后解析第一列的任何建议?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

但这不起作用。它只是在顶部给了我“姓名\电话...”,然后是下面的数据。表头不以 tab.s 分隔

4

3 回答 3

1

首先确保分隔符确实是您的想法。您可以通过使用 openoffice 打开文件或编写 python 函数来使用正则表达式(re 模块)检测分隔符来检查这一点。还要确保行以“/n”或 windows 样式(附加 r)结尾。

标题只不过是第一行。所以在 python 中打开文件,读取所有行。在第一行添加标题字符串(由/t 分隔制表符分隔符)。将这些行写回文件。就是这样。

于 2013-07-01T17:46:34.983 回答
1

要在 python 中执行此操作,您可以尝试读取每一行(随时修复数据),然后编写一个固定的制表符分隔值文件,其标题如下:

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)

这将以下数据文件作为输入:

原始数据.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

此代码假定文件的最后一行符合“姓名、电话号码、电子邮件和网站”的理想格式,否则最后“不完整”行将被静默删除。当它读取每一行时,它会查看是否有足够的列来满足有效的行。如果没有,则将 name 列附加到变量并继续读取,如果存在,则将 name 列与联系信息结合起来,并将其附加到名为rows. 完成读取输入后,它使用 Pythonscsv模块在附加标题行后写入数据。

于 2013-07-01T18:05:16.743 回答
0

可能有一种优雅的编程方法可以完成此操作,但我使用的方法是使用“制表符”作为分隔符在 excel 中打开 .txt 文件。打开文件后,我只是在第一行中输入了列标题。小菜一碟!:)

于 2013-07-01T17:33:33.450 回答