我想转换标准字典中的所有单词(例如:/ usr / share / dict / unix机器的单词)整数,并在字典中的每两个单词之间找到XOR(在将它们转换为整数之后)可能会将其存储在新文件中。
由于我是python的新手,并且因为文件很大,程序会不时被挂起。
import os
dictionary = open("/usr/share/dict/words","r")
'''a = os.path.getsize("/usr/share/dict/words")
c = fo.read(a)'''
words = dictionary.readlines()
foo = open("word_integer.txt", "a")
for word in words:
foo.write(word)
foo.write("\t")
int_word = int(word.encode('hex'), 16)
'''print int_word'''
foo.write(str(int_word))
foo.write("\n")
foo.close()
答案 0 :(得分:2)
首先我们需要一个方法将你的字符串转换成一个int,我会做一个(因为你所做的根本不适合我,也许你的意思是编码为unicode?):
def word_to_int(word):
return sum(ord(i) for i in word.strip())
接下来,我们需要处理文件。以下工作在Python 2.7之后,(在2.6中,只是嵌套两个与块分开,或使用contextlib.nested
:
with open("/usr/share/dict/words","rU") as dictionary:
with open("word_integer.txt", "a") as foo:
while dictionary:
try:
w1, w2 = next(dictionary), next(dictionary)
foo.write(str(word_to_int(w1) ^ word_to_int(w2)))
except StopIteration:
print("We've run out of words!")
break
答案 1 :(得分:0)
此代码似乎对我有用。您可能会遇到效率问题,因为您在整个文件上调用readlines()
,这会立即将其全部存入内存。
此解决方案逐行循环遍历文件,并计算xor。
f = open('/usr/share/dict/words', 'r')
pairwise_xors = {}
def str_to_int(w):
return int(w.encode('hex'), 16)
while True:
line1 = f.readline().strip()
g = open('/usr/share/dict/words', 'r')
line2 = g.readline().strip()
if line1 and line2:
pairwise_xors[(line1, line2)] = (str_to_int(line1) ^ str_to_int(line2))
else:
g.close()
break
f.close()