所以,我得到了一个.txt文件,其值以分号分隔。 我想要做的是提取第一列,将值添加到列表但不添加重复项。 我想出的是:
values = []
with open(filename, 'r') as file:
data = file.readlines()
for line in data:
tmpVal = line.split(';')[0]
if tmpVal not in values:
values.append(tmpVal)
虽然文件有点大(~706 MB),但这个脚本运行速度很慢(现在实际运行大约10分钟)。
有人可以指出我可以改进代码的地方吗?
万分感谢 杰罗姆
答案 0 :(得分:2)
使用集合代替值列表。设置会员资格检查会更快。
values = set()
不要使用readlines()。只需通过文件本身进行迭代。
答案 1 :(得分:1)
使用set
values = set()
with open(filename, 'r') as file:
for line in file:
tmpVal = line.split(';')[0]
values.add(tmpVal)
答案 2 :(得分:1)
您可以使用的一种可能的改进是使用集合而不是值列表。这将弃用if tmpVal not in values
行,这是一个o(n)操作(很贵!)。你的代码将是:
values = set()
with open(filename, 'r') as file:
data = file.readlines()
for line in data:
tmpVal = line.split(';')[0]
if tmpVal not in values:
values.add(tmpVal)
并使其更加pythonic:
with open(filename, 'r') as f:
return set(line.split(';')[0] for line in file.readlines())
或更新版本的python(使用set comprehension):
with open(filename, 'r') as f:
return {line.split(';')[0] for line in file.readlines()}