Python 应用正则表达式提取多个TXT文件的信息,最后生成CSV文件

  1. 提取日记文件中小明日记和小红日记中txt文本的信息,样例如附件日记.csv所示。
  2. 提取信息要求使用正则表达式,不能使用replace等其它函数,代码开头要用os.chdir。
  3. 日期从文件名中提取,如XMRJ20090901A131.txt日期是20090901。

TXT文件的格式基本上一致。小明日记和小红日记文件夹里都有多个TXT文件。需要将其中全部TXT文件按照要求提取信息。

img

img

img

img

需要你的原文件txt

你的附件在哪csv

需求发详细点,源文件也发出来

提供小小代码示例:
#将代码中的 path/to/folder 替换为你存放小明和小红日记文件的实际路径,将 Diary.csv 替换为你想要保存CSV文件的实际文件名。

import os  
import re  
import csv  
  
# 改变工作目录  
os.chdir('path/to/folder')  
  
# 日记文件名中的日期提取正则表达式  
regex_date = re.compile(r'(\d{8})A\d{2}.txt')  
  
# 提取日记中的正文部分的正则表达式  
regex_content = re.compile(r'>(.*?)<')  
  
# 定义一个函数,用于读取文件并提取信息  
def extract_info(folder_name):  
    file_list = os.listdir(folder_name)  
    result = []  
    for file_name in file_list:  
        # 获取日期部分  
        match = regex_date.search(file_name)  
        if match:  
            date_str = match.group(1)  
            date = int(date_str)  
            # 打开文件并读取内容  
            with open(os.path.join(folder_name, file_name), 'r', encoding='utf-8') as f:  
                content = f.read()  
            # 提取正文部分  
            match = regex_content.search(content)  
            if match:  
                text = match.group(1)  
                result.append([date, text])  
    return result  
  
# 提取小明和小红的日记信息,并写入CSV文件  
info_xiaoming = extract_info('XiaomingDiary')  
info_xiaohong = extract_info('XiaohongDiary')  
with open('Diary.csv', 'w', newline='', encoding='utf-8') as f:  
    writer = csv.writer(f)  
    writer.writerow(['日期', '正文'])  
    for row in info_xiaoming:  
        writer.writerow(row)  
    for row in info_xiaohong:  
        writer.writerow(row)

#未完待续,如有帮助,恭请采纳
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以提供以下解决方案:

    1. 首先需要导入re模块来使用正则表达式,同时要用到csv模块来生成CSV文件。

    2. 可以先定义一个函数,用正则表达式从txt文件中提取所需信息,函数内部可以先用open函数打开txt文件,并用read方法读取文件内容,然后用findall方法匹配规定好的信息。

    3. 在函数中定义一个列表,用于存储提取的信息。并将列表中的每一项都按照要求格式化之后添加到CSV文件中。

    4. 再定义一个主函数,用于遍历所有的TXT文件,将每个文件名中的日期提取出来,并作为CSV文件名称的一部分。同时调用之前定义的函数,将每个文件内的信息提取并添加到CSV文件中。

    5. 在主函数中也可以加入一些错误处理的代码,比如判断TXT文件是否存在等。

    代码示例如下:

    import os
    import re
    import csv
    
    # 定义正则表达式用来提取信息
    p = re.compile(r'需要提取的正则表达式')
    
    # 定义函数用来提取信息并将结果写入CSV
    def extract_txt_info(txt_file, csv_file):
        info_list = []
        with open(txt_file, 'r', encoding='utf-8') as f:
            content = f.read()
            # 用findall方法匹配规定好的信息
            info_list = p.findall(content)
    
        # 将每条信息及其所在文件名添加到CSV文件中
        csv_name = os.path.basename(txt_file) + '.csv'
        with open(csv_file + csv_name, 'w', newline='', encoding='utf-8') as f:
            writer = csv.writer(f)
            for info in info_list:
                writer.writerow([csv_name, info])
    
    # 定义主函数用来遍历所有TXT文件并提取信息到CSV文件中
    def main():
        # 定义一个列表用于存储所有TXT文件路径
        txt_files = []
    
        # 遍历小明日记目录下所有TXT文件,并将路径加入txt_files列表中
        for filename in os.listdir('小明日记'):
            if filename.endswith('.txt'):
                txt_files.append(os.path.join('小明日记', filename))
    
        # 遍历小红日记目录下所有TXT文件,并将路径加入txt_files列表中
        for filename in os.listdir('小红日记'):
            if filename.endswith('.txt'):
                txt_files.append(os.path.join('小红日记', filename))
    
        # 定义CSV文件名
        csv_file = 'info_'
    
        # 遍历所有TXT文件,提取信息并将结果写入CSV
        for txt_file in txt_files:
            extract_txt_info(txt_file, csv_file)
    
    if __name__ == '__main__':
        main()
    

    需要注意以下几点:

    1. 正则表达式需要根据具体情况进行修改,保证能够匹配到需要提取的信息。

    2. CSV文件的名称需要根据具体情况进行修改,以上代码将CSV文件命名为“info_加上TXT文件名.csv”。

    3. 在Windows系统下,最好使用记事本(Notepad)等纯文本编辑器来编辑TXT文件,避免因编码格式问题导致错误。