遍历目录结构并在 Python 中解析文本文件

Posted

技术标签:

【中文标题】遍历目录结构并在 Python 中解析文本文件【英文标题】:Iterate through a directory structure and parse text files in Python 【发布时间】:2017-12-23 06:52:19 【问题描述】:

我正在开发一个 Python(3.6) 项目,在该项目中我需要从目录结构中解析一些文本文件。

目录结构为:

--easy(根目录) ----子目录 --------another_sub_dir -----------描述(另一个子目录) ------------------ description.txt(文件)

我需要遍历子目录中的所有 descriptions.txt 文件,然后将它们解析到数据库中。

description.txt 文件以标准格式格式化为:

从文本段落开始,然后我们有输入、输出、约束、示例 > 输入、输出和解释标题。我们需要将 description.txt 文件保存在数据库中,因为这些标题将转换为 DB 表列。

我已尝试遍历目录结构以查找所有 description.txt 文件为:

import os
for root, dirs, files in os.walk(os.path.join('easy')):
    for file in files:
        if file.endswith('description.txt'):
            print(os.path.join(root, file))

通过这种方式,我们可以获得所有 descriptions.txt 文件,但我们如何通过使用该文本文件中的标题来解析它们并将它们保存到数据库中。

我们怎样才能做到这一点? 请帮帮我!

提前致谢!

【问题讨论】:

description.txt 是否用逗号分隔?我需要更多详细信息,但通常我的首选工具是 pandas 及其 read_csv 函数。见pandas.pydata.org/pandas-docs/stable/generated/…。 用空行分隔! 您可以在这里查看示例文件:mega.nz/#!4MU2wKgC!-YcaMXRAFi-cqUzDVABvYzOMKj8015Q1XDGwc1FK0lI 【参考方案1】:

您可以将标题保存为列表,然后再将其拆分:-

with open(description.txt) as desc_file:
    Heading1 = "keep reading until you get 2 blank lines in a row"
    Heading2 = "keep reading until you get 2 blank lines in a row"
    .
    .
    Last_ Heading = ditto

现在您可以将这些标题映射到表格列。

编辑:- 使用 open 您可能希望指定具有哪种编码文件,它因系统而异。

【讨论】:

它返回那个错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1667: ordinal not in range(128) @AbdulRehman,这是一个编码错误,你可能想看看你的文件有什么样的编码。它因系统而异。尝试使用“open(description.txt, encoding = 'utf-8')” 我刚刚打印了desc_header_list,它返回了所有description.txt文件的第一行,我需要根据输入、输出等标题解析文件,你可以看一个例子文件位于:mega.nz/#!4MU2wKgC!-YcaMXRAFi-cqUzDVABvYzOMKj8015Q1XDGwc1FK0‌​lI @AbdulRehman 我明白了,顺序或标题是一致的,并且对于所有文件都是相同的。另请参阅,每当标题出现时,它前面都有 2 个空行。您可以继续存储值,直到出现 2 个空白行,然后将下一行存储到即将到来的标题中 @AbdulRehman 自己试试吧,我相信你一定能做到的。

以上是关于遍历目录结构并在 Python 中解析文本文件的主要内容,如果未能解决你的问题,请参考以下文章

python读取指定目录中所有文本文件的第一行,并以此为该文本文件名重命名

用C语言编出遍历出某个目录以及其子目录下所有以TXT为扩展名的文本文件

python文件名获取文件路径

C语言遍历目录中的文件

后台站点文件扫描

Python解析Python中的文件操作