【自然语言处理】python 批量读txt文件的方法

该博客介绍了如何使用Python读取多个TXT文件,处理内容并进行动词统计。首先,通过遍历文件夹结构读取所有TXT文件,并将内容存入列表。然后,对内容进行词性标注,提取动词并进行词频统计。最后,将统计结果写入Excel表格。编码问题中,发现'ISO-8859-1'比'utf-8'更适合处理文件。
摘要由CSDN通过智能技术生成

1 读txt文件

下面代码实现的是:将一个txt文件内每行内容都存放到列表contents中。
有一点强调,为什么要在路径前加'r'
其实r的作用和\\的作用一样,都是为了防止程序将\当作是转义字符,所以r\\在写的时候使用一种方法就可以,当然如果路径是/,那么就不需要涉及这些了。

import operator
contents = []   # 存放txt文件每行的内容
filename = r"C:\Users\Lenovo\Desktop\大三上\nlp实验室\python处理\21.8.29 test.txt"
with open(filename, 'r') as f:
    for line in f.readlines():
        contents.append(line)
f.close()

2 批量读文件

批量读文件的核心就是学会拼凑文件名,只要掌握了这个批量读取就不是问题。
现在我的文件夹结构如下图(我要读这个大文件夹下面的所有小文件夹里的所有txt文件):
在这里插入图片描述
我的实现代码如下:(结合1)
注意有一个细节:encoding最开始我选用'utf-8'时不知道为什么不行,后来改成了下面的'ISO-8859-1'

import os
import operator

contents = []   # 存放txt文件每行的内容
path1 = r"C:\Users\Lenovo\Desktop\acl2021"
files_1 = os.listdir(path1)   # 得到path1文件夹下所有文件的名称
for file in files_1:
    path2 = path1 + "\\" + file
    files_2 = os.listdir(path2)	# 得到path2文件夹下所有文件的名称
    for file2 in files_2:
        pos = path2 + "\\" + file2  # filename
        with open(pos, 'r', encoding='ISO-8859-1') as f:     # encoding='utf-8'不行
            for line in f.readlines():
                contents.append(line)
        f.close()

这样,我大文件夹里767个txt文件的所有内容就存到了contents列表中,接下来就可以具体处理了。

3 个人记录

2021.9.29 抽取动词总代码

import os
import operator
import xlwt
from nltk import word_tokenize
from nltk import pos_tag
from nltk.stem import WordNetLemmatizer

# 读txt
contents = []   # 存放txt文件每行的内容
path1 = r"C:\Users\Lenovo\Desktop\acl2021"
files_1 = os.listdir(path1)   # 得到path1文件夹下所有文件的名称
for file in files_1:
    path2 = path1 + "\\" + file
    files_2 = os.listdir(path2)
    for file2 in files_2:
        pos = path2 + "\\" + file2  # filename
        with open(pos, 'r', encoding='ISO-8859-1') as f:     # encoding='utf-8'不行
            for line in f.readlines():
                contents.append(line)
        f.close()

# 动词统计
dic = {}
wnl = WordNetLemmatizer()
for line in contents:           # 每一行
    line = line.lower()         # 先小写处理
    tokens = word_tokenize(line)    # 标记解析
    tags = pos_tag(tokens)          # 词性标注
    v_tags = {'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ'}      # 动词集
    for word, pos in tags:
        if pos in v_tags:
            word = wnl.lemmatize(word, 'v')     # 词性还原
            if word not in dic:
                dic[word] = 1
            else:
                dic[word] = dic[word] + 1

res = sorted(dic.items(), key=operator.itemgetter(1), reverse=True)     # 排序的结果是list类型
# for item in res:
#     if item[1] > 3:
#         print(item)

# 写入excel
wb = xlwt.Workbook()
sh = wb.add_sheet('test')
idx = 0
for item in res:
    if item[1] > 3:
        sh.write(idx, 0, item[0])
        sh.write(idx, 1, item[1])
        idx = idx + 1
    else:
        break

wb.save(r"C:\Users\Lenovo\Desktop\动词筛选2.xls")
print("写入完成")

4 参考

[1] python操作txt文件中数据教程[1]-使用python读写txt文件
[2] python 批量读取文件夹中的多个TXT文件

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值