Python 计算.txt文件中连续出现的值

Python 计算.txt文件中连续出现的值,python,text,Python,Text,我有一个.txt文件,其中有两个单词在单独的行中重复 这里有一个例子。(实际长度约为80000行) 我试图开发一些Python代码来计算连续的行并返回它们重复的次数。因此,对于这个示例,我想将[3,4,5]返回到另一个.txt文件 word="100011010" count=1 length="" for i in range(1, len(word)): if word[i-1] == word[i]: count += 1 else: l

我有一个.txt文件,其中有两个单词在单独的行中重复

这里有一个例子。(实际长度约为80000行)

我试图开发一些Python代码来计算连续的行并返回它们重复的次数。因此,对于这个示例,我想将[3,4,5]返回到另一个.txt文件

word="100011010"
count=1
length=""

for i in range(1, len(word)):

    if word[i-1] == word[i]:
       count += 1

    else:
        length += word[i-1]+" repeats "+str(count)+", "
        count=1

length += ("and "+word[i]+" repeats "+str(count))
print (length)

这个概念类似于上面的字符串代码。有没有办法通过列表来实现这一点?

您可以尝试将文件数据转换为列表,并遵循下面给出的方法:

with open("./sample.txt", 'r') as fl:
    fl_list = list(fl)
    unique_data = set(fl_list)
    for unique in unique_data:
        print "%s - count: %s" %(unique, fl_list.count(unique))

#output:
ANS - count: 8
AUT - count: 4

打开文件并读取以计数:

l=[]
last=''
with open('data.txt', 'r') as f:
    data = f.readlines()

    for line in data:
        words = line.split()
        if words[0]==last:
            l[-1]=l[-1]+1
            last=words[0]
        else:
            l.append(1)
        if last=='':
            last=words[0]

您可以如下方式读取整个文件:

content = []
with open('/path/to/file.txt', 'r') as file
    content = file.readlines()
    #Maybe you want to strip the lines
    #content = [line.strip() for line in file.readlines()]
这里有一个包含文件所有行的列表

def count_consecutive_lines(lines):
    counter = 1
    output = ''
    for index in range(1, len(lines)):
        if lines[index] != lines[index-1]:
            output += '{} repeats {} times.\n'.format(lines[index], counter)
            counter = 1
        counter += 1
   return output
把这叫做

print(count_consecutive_lines(content))

这是您的预期输出:)


不会将整个文件加载到内存中的答案:

last = None
count = 0
result = []

with open('sample.txt', 'rb') as f:
    for line in f:
        line = line.strip()
        if line == last:
            count = count + 1
        else:
            if count > 0:
                result.append(count)
            count = 1
            last = line

    result.append(count)
    print result
结果:

[3, 4, 5]
更新

该列表包含整数,您只能连接字符串,因此必须对其进行转换

outFile.write('\n'.join(str(n) for n in result))

您可以使用完全相同的代码。只需用你的列表更改单词,对不起,我把最后一个问题的措辞弄错了。现在信息是在一个.txt文件中,我是否需要将其转换为一个列表?是否需要直接从.txt文件中读取它?可以从中单选某一行(例如单词[2])。有没有办法说第[2]行?@Slynes不确定你的应用程序是什么,但你可能会发现这也适用:他不想要一个单词的总计数,而是一个单词的连续计数,看看他的例子,ans在期望的最终结果中出现了两次。这不是OP想要的。。计算连续的相似项目…不计算所有相似项目这将是好的。但是我能单独计算一下吗?例如,ANS计数:3,AUT计数:4,ANS计数:5。我需要记录AUT单独出现的次数。如果条件语法不正确,分配vs comp。谢谢,我会尝试一下。我可以做一个file.write('\n.join)来将计数写入另一个.txt文件(\n为每一个文件写一行)吗?@slynes是的,你认为这很有效。我尝试使用outFile.write('\n'.join(result))(outFile已定义)将结果写入一个.txt文件,而不是在最后打印,但它在某些情况下不起作用reason@slynes更新了答案。
[3, 4, 5]
outFile.write('\n'.join(str(n) for n in result))