我有多个文件,每个文件都有一行,每个文件大约有 10M 个数字。我想检查每个文件,并为每个有重复数字的文件打印 0,为每个没有重复数字的文件打印 1。
我正在使用列表来计算频率。由于每行有大量数字,我想在接受每个数字后更新频率,并在发现重复数字时立即中断。虽然这在 C 语言中很简单,但我不知道如何在 Python 中做到这一点。
如何以逐字方式输入一行而不存储(或将其作为输入)整行?
编辑:我还需要一种通过实时输入而不是文件来执行此操作的方法。
读取该行,分割该行,将数组结果复制到一个集合中。如果集合的大小小于数组的大小,则文件包含重复元素
with open('filename', 'r') as f:
for line in f:
# Here is where you do what I said above
要逐字读取文件,请尝试此操作
import itertools
def readWords(file_object):
word = ""
for ch in itertools.takewhile(lambda c: bool(c), itertools.imap(file_object.read, itertools.repeat(1))):
if ch.isspace():
if word: # In case of multiple spaces
yield word
word = ""
continue
word += ch
if word:
yield word # Handles last word before EOF
然后你可以这样做:
with open('filename', 'r') as f:
for num in itertools.imap(int, readWords(f)):
# Store the numbers in a set, and use the set to check if the number already exists
此方法也适用于流,因为它一次只读取一个字节,并从输入流中输出一个空格分隔的字符串。
<小时/>
给出这个答案后,我已经更新了这个方法很多。看看吧
<script src="https://gist.github.com/smac89/bddb27d975c59a5f053256c893630cdc.js"></script>
我是一名优秀的程序员,十分优秀!