【问题标题】:Extracting a String from a List inside a Dictionary in Python从Python字典中的列表中提取字符串
【发布时间】:2017-12-15 21:44:43
【问题描述】:

我是 Python 新手(一周大),非常感谢一些帮助。我正在尝试从 6,000 多篇新闻文章中提取字符串(日期)。我正在练习一些编造的文本,这些文本与我想要处理的新闻文章遵循相同的模式:

Lorem Ipsum Dolor

2017 年 5 月 21 日星期一

Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Nunc fringilla arcu congue metus aliquam mollis。 Mauris nec maximus purus。 Maecenas 坐在 amet pretium Tellus。 Praesent sed rhoncus eo。 Duis id commodo orci。 dignissim lacus 的 Quisque。

和:

Lorem Ipsum Dolor

2017 年 7 月 21 日星期一

Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Nunc fringilla arcu congue metus aliquam mollis。 Mauris nec maximus purus。 Maecenas 坐在 amet pretium Tellus。 Praesent sed rhoncus eo。 Duis id commodo orci。 dignissim lacus 的 Quisque。

我知道所有 .txt 文件的这些日期都位于同一位置。它们位于每篇文章标题后的换行符 (\n) 和下一个换行符 (\n) 之间。

到目前为止,我已经设法使用以下代码创建了一个字典:

base_dir = 'C:/Users/Lorem/text'
output = {}
file_list = []

for (dirpath, dirnames, filenames) in os.walk(base_dir):
for f in filenames:
    if 'txt' in str(f):
        e = os.path.join(str(dirpath), str(f))
        file_list.append(e)

for f in file_list:
    print f
    txtfile = open(f, 'r')
    output[f] = []
    for line in txtfile:
        if '\n' in line:
            output[f].append(line)
 tabs = []
 for tab in output:
     tabs.append(tab)

输出看起来不错:

output
{'C:/Users/Lorem/text\\lorem.txt': ['Lorem Ipsum Dolor\n','Monday, 5/21/2017\n','\n','Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue metus aliquam mollis.\n','Mauris nec maximus purus. Maecenas sit amet pretium tellus. Praesent sed rhoncus eo. Duis id commodo orci.\n'],'C:/Users/Lorem/text\\lorem2.txt': ['Lorem Ipsum Dolor\n','Monday, 7/21/2017\n','\n','Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue metus aliquam mollis.\n','Mauris nec maximus purus. Maecenas sit amet pretium tellus. Praesent sed rhoncus eo. Duis id commodo orci.\n']}

此时我尝试使用正则表达式从字典中的列表中提取日期:

result = []
for out in output.values():
    if re.search('Dolor\n,(.*)\n', out):
        result.append(out)

但是,正则表达式不适用于列表。我将如何从我的列表中解析出这些日期?理想情况下,我想要一个字典或一些带有文本和日期的数据结构,以便我可以将它移动到 R,如果我工作得更舒服的话。

谢谢!

【问题讨论】:

  • re.search() 返回一个值。您必须获取该值,然后将其附加到您的列表中。

标签: python python-2.7 text-parsing


【解决方案1】:

您可以使用字典理解进行解析:

output = {'C:/Users/Lorem/text\\lorem.txt': ['Lorem Ipsum Dolor\n','Monday, 5/21/2017\n','\n','Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue metus aliquam mollis.\n','Mauris nec maximus purus. Maecenas sit amet pretium tellus. Praesent sed rhoncus eo. Duis id commodo orci.\n'],'C:/Users/Lorem/text\\lorem2.txt': ['Lorem Ipsum Dolor\n','Monday, 7/21/2017\n','\n','Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue metus aliquam mollis.\n','Mauris nec maximus purus. Maecenas sit amet pretium tellus. Praesent sed rhoncus eo. Duis id commodo orci.\n']}

dates = {a:b[1:3] for a, b in output.items()}

输出:

{'C:/Users/Lorem/text\\lorem2.txt': ['Monday, 7/21/2017\n', '\n'], 'C:/Users/Lorem/text\\lorem.txt': ['Monday, 5/21/2017\n', '\n']}

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2023-01-13
    • 1970-01-01
    相关资源
    最近更新 更多