使用python3.6和Xlsxwri在文件夹中的文件中循环查找regex并发送到Excel时没有结果

2024-04-19 03:56:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在此之前,我想指出的是,我对python和整个编程都是相当陌生的,所以如果我没有澄清我的问题,我深表歉意。如果是这样的话,请让我知道我做错了什么,我会修改我的问题。你知道吗

快速下线:

我创建了一个相当不错的脚本,它遍历一个特定文件夹目录中的一大堆TXT文件(现在大约120个)。如果TXT文件符合某些条件(filename.endswith(" ")),则会启动一个循环,该循环将进入每个单独的文本文件,并通过regex查找所有电子邮件。对于在特定文件中查找电子邮件的每个实例,都会创建一个列表。一旦提取了所有这些电子邮件(并创建了相应的列表),它们就会通过xlsxwriter发送到Excel。你知道吗

主要问题:

当我打开创建的excel文件时,没有电子邮件/结果!此外,脚本运行时不会产生错误。当我一个文件一个文件地执行时,这个脚本工作得非常好(这意味着我使用文本文件的特定路径,而不是遍历整个文件夹)。我做错什么了?你知道吗

理想情况下(但没有问题重要): 我希望脚本在新创建的工作簿中为每个列表创建一个工作表,以这种方式进行组织。到目前为止,我在文件夹中有大约120个TXT文件,但是这些文件可以根据文件名进行分组(一个工作簿中有超过50张工作表是不实际的)。文件名是这样共享的。。。你知道吗

Client_Info_LA(1) , Client_Info_LA(2), Self_Info(1),Self_Info(2)

因此,把所有的客户信息都组织在一张纸上,而把自己的信息组织在另一张纸上(当时正在考虑用熊猫来分组)。对我来说,这并不像让脚本把我需要的数据输出到Excel中那样重要,但是如果有人知道如何解决这个问题,那就真的很有帮助了!你知道吗

这是剧本

import re
import xlsxwriter
import os


'Create List of Lists'

n = len(os.listdir("C:\\Users\\me\\Desktop\\Emails_Project\\Txt_Emails"))
lists = [[] for _ in range(n)] #For stack peeps: Is the list of lists causing the issue?


workbook = xlsxwriter.Workbook('TestEmails1.xlsx')
worksheet = workbook.add_worksheet()


'Find emails'
for filename in os.listdir("C:\\Users\\me\\Desktop\\Emails_Project\\Txt_Emails"):
    if filename.endswith(".txt") :

        for emails in filename:

            if re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", emails):
                lists.append(emails)
                worksheet.write_column('A2', lists)


    else:
        continue


workbook.close()

我一直在网上搜索,尝试了很多方法,但都没有成功。这真的是我的最后手段,所以如果有人能给我一些指导,建议,或洞察如何解决这个问题,我会非常感谢!你知道吗


Tags: 文件importinfotxt脚本文件夹列表for
1条回答
网友
1楼 · 发布于 2024-04-19 03:56:28

提供的代码中主要有两个问题。你知道吗

  • 首先,它不会打开文件。变量file_name是一个字符串(字符列表)。因此,for循环for emails in file_name:将迭代字符串file_name的字符元素。因此,emails是一个字符。你知道吗
  • 第二,它覆盖了它以前写的东西。worksheet.write_column('A2', lists)因为每次都指定相同的单元格。你知道吗

下面是一个建议的代码片段,它将从不同文件中找到的电子邮件写入同一工作表中的不同列。你知道吗

import re
import xlsxwriter
import os
import codecs

workbook = xlsxwriter.Workbook('TestEmails1.xlsx')
worksheet = workbook.add_worksheet()

path = "C:\\Users\\me\\Desktop\\Emails_Project\\Txt_Emails\\"
row_number = 0
col_number = 0
for filename in os.listdir(path):
    if filename.endswith(".txt") :
        file_handler = codecs.open(path+filename,'r', 'utf-8')
        file_contents = file_handler.read()
        found_mails = re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", file_contents)
        if found_mails != [] :
            for mail in found_mails:
                worksheet.write(row_number, col_number, mail)
                row_number+=1
            row_number=0
            col_number+=1
workbook.close()

相关问题 更多 >