python - 在代码中定义列表与从文件中读取列表
问题描述
我正在尝试计算给定报告中特定单词的数量。有谁知道为什么在代码中定义一个列表会使以下代码的第二部分比从文件中读取列表运行得更快?有解决办法吗?包含相同单词的列表比以下示例中的两个单词长得多。
# Example code: Within code list
import csv
import glob
import re
import time
TARGET_FILES = r'C:/Users/s170760/Desktop/Reports_Cleaned/*.*'
OUTPUT_FILE = r'C:/Users/s170760/Desktop/Parser.csv'
OUTPUT_FIELDS = ['file name', 'create']
create = {'agile', 'skills'}
def main():
f_out = open(OUTPUT_FILE, 'w')
wr = csv.writer(f_out, lineterminator='\n')
wr.writerow(OUTPUT_FIELDS)
file_list = glob.glob(TARGET_FILES)
for file in file_list:
print(file)
with open(file, 'r', encoding='UTF-8', errors='ignore') as f_in:
doc = f_in.read()
doc = doc.lower()
output_data = get_data(doc)
output_data[0] = file
wr.writerow(output_data)
def get_data(doc):
_odata = [0] * 2
tokens = re.findall('\w(?:[-\w]*\w)?', doc)
for token in tokens:
if token in create:
_odata[1] += 1
return _odata
这是另一种方式:
# Example code: Reading list from a file
import csv
import glob
import re
import time
TARGET_FILES = r'C:/Users/s170760/Desktop/Reports_Cleaned/*.*'
OUTPUT_FILE = r'C:/Users/s170760/Desktop/Parser.csv'
OUTPUT_FIELDS = ['file name', 'create']
create = open('C:/Users/s170760/Desktop/Create.txt', 'r').read().splitlines()
def main():
f_out = open(OUTPUT_FILE, 'w')
wr = csv.writer(f_out, lineterminator='\n')
wr.writerow(OUTPUT_FIELDS)
file_list = glob.glob(TARGET_FILES)
for file in file_list:
print(file)
with open(file, 'r', encoding='UTF-8', errors='ignore') as f_in:
doc = f_in.read()
doc = doc.lower()
output_data = get_data(doc)
output_data[0] = file
wr.writerow(output_data)
def get_data(doc):
_odata = [0] * 2
tokens = re.findall('\w(?:[-\w]*\w)?', doc)
for token in tokens:
if token in create:
_odata[1] += 1
return _odata
解决方案
正如 Mark 在评论中指出的那样,第一个代码片段使用 a set
of 字符串,而第二个代码片段将文件加载到 a list
of 字符串中。
为什么在这个用例中集合比列表快,在这个Stack Overflow 答案中有很好的解释。将输出解析open
为 aset
确实可以解决您的问题。
所以替换:
create = open('C:/Users/s170760/Desktop/Create.txt', 'r').read().splitlines()
和:
create = set(open('C:/Users/s170760/Desktop/Create.txt', 'r').read().splitlines())
推荐阅读
- java - 在流中添加 lambda 以定义列表是否反转
- autodesk-forge - 从 Forge API 查询返回的文件项未出现在 BIM360 门户中(即它们似乎不存在,除非通过查询)
- python - Ironpython Spotfire / 导出到 html 文件
- c++ - 写入 wav 文件时定期创建静音
- vim - 如何在vim中对齐混合数字?
- flutter - 卡片小部件中带有条件颜色的颤振问题
- javascript - 如何搜索对象数组并获取总数
- python - 这些是卷积神经网络的可取的最佳实践吗?
- sql - SQL 查询检索某个名字
- ios - 在 NSUserDefaults 中存储嵌套对象