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文件
更多推荐
【自然语言处理】python 批量读txt文件的方法
发布评论