转置多个txt数据文件并导入excel或数据库

Transpose multiple txt data files and import into excel or database

我有大约 1000 个以下格式的 txt 文件。 标识符通过 ':' 与数据分隔。然而,它自己的数据可以包含“:”我正在编写一个脚本,可以让我将数据转置并导入到 excel、csv、microsoft acess 或 mssql 格式。以结构化的方式。鉴于所有 txt 文件的标识符都相同。

Author: sharkespare
Content-Length: 15200098
Content-Type: application/pdf
Creation-Date: 2015-02-05T07:27:34Z
Last-Modified: 2015-02-05T07:28:38Z
Last-Save-Date: 2015-02-05T07:28:38Z
created: Thu Feb 05 08:27:34 CET 2015
creator: Williams spear
date: 2015-02-05T07:27:34Z
dc:creator: Library of congress

您可以循环思考字符串,直到遇到“:”符号,然后查看下一个字母,如果它是 space(" "),那么您想要的数据与整个字符串分开

您没有说明首选哪种技术,但由于 python 和 Excel 被标记,我假设您可以同时使用这两种技术。以下内容在 python 中很容易实现。我假设文件格式是静态的。

创建一个 header 行字符串,例如"Author, Content-Length, ..."。 打开输出文件并将 header 写入文件。

遍历输入文件的目录。 对于每个文件,读取文件中的行和标识符的拆分(你知道标识符的名称,所以拆分或字符串替换应该有效,你可以用冒号拆分,但是你必须特别注意 dc:creator 标识符)。将隔离的数据附加到该文件的字符串中,附加一个“,”。完成文件后,将该字符串附加到输出文件。完成所有文件后,输出文件将是一个可以用 Excel.

打开的 csv

一些可能有助于实施的建议:

How can I iterate over files in a given directory?

How do I read a file line-by-line into a list?

Writing to CSV with Python adds blank lines

怎么样:

打开txt file,用": "拆分(冒号后有space),放入列表中。

text=[]
with open('read_file.txt','r') as f:
    for line in f:
        for word in line.split(": "):
            text.append(word)

现在每个偶数元素都是一个标识符,下一个奇数元素是对应的数据。重建列表,将每个标识符及其数据放在一起:

sorted = [text[i:i+2] for i in range(0, len(text), 2)]

最后使用 zip:

将所有内容写入列中的 csv file
import csv
with open('save_file.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(zip(*sorted))

如果不想转置,只需将zip(*sorted)替换为sorted即可。 保存第一个文件中的文本后,遍历其他文件并仅将 data 添加到 csv file。您可以通过使用 'a' 参数打开来实现,允许您在文件末尾附加内容,并使用 [zip(*sorted)[1]]:

files = ["file1.txt", "file2.txt", "file3.txt", etc]
for each in  files:
    text=[]
    with open(str(each),'r') as f:
        for line in f:
            for word in line.split(": "):
                text.append(word)

    sorted = [lst[i:i+2] for i in range(0, len(lst), 2)]

    with open('save_file.csv', 'a') as f:
        writer = csv.writer(f)
        writer.writerows([zip(*sorted)[1]])