找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1955|回复: 1

[求助] 麻烦大神写一个py2的程序

2

主题

2

帖子

2

积分

贫民

积分
2
xiaoxiaobai 发表于 2021-10-25 20:21:38 | 显示全部楼层 |阅读模式
2威望
需求如下图:
运行环境 :windonw 10

需处理元数据情况如下:

文件格式: TXT 文本。
文件名称:12345.txt
数据行数:211876 行
每行字符:3000个字符,每个字符之间是空格隔开
字符元素:字符只包含  0、1、2
数据特点:1、每行的左起首字符为1或2,即大于0;
                2、每行的最后的字符为1或2,即大于0;

数据举例:   2 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 1 ·············· 2 0 0 0 0 0 2  (共3000个字符,由空格间隔)


结果举例:100个  6 7 5 ·············· 6 (假设上面数据,有100个大于0的字符的输出结果)
输出结果:1、每行数据大于0的字符的个数的值,
                2、从左到右,每行的每两个大于0的字符,相隔的字符个数的值+1;用空格隔开

输出文件:211876 行的结果,保存为txt文本
输出保存:54321.txt
麻烦大神,结果请私信给我,感激万分

百度知道求助.png
回复

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
fwqman 发表于 2021-11-6 11:43:31 | 显示全部楼层
本帖最后由 fwqman 于 2021-11-6 11:48 编辑

import random

def data_yield(count):
        i = 0
        while i < count:
                if i == 0 or i == count - 1:
                        yield str(random.randrange(1,3)) + ' '
                        i += 1
                else:
                        yield str(random.randrange(0,3)) + ' '
                        i += 1

class ListHelper:
        @staticmethod
        def select(lst, func):
                i = 0
                for obj in lst:
                        if func(obj):
                                i += 1
                return i

        @staticmethod
        def count_zero(lst, func):
                i = 0
                for obj in lst:
                        if func(obj):
                                i += 1
                                continue
                        if i:
                                yield str(i + 1) + ' '
                                i = 0

def print_result(row, lst):
         select_result = ListHelper.select(lst, lambda obj: obj != '0 ')
         zero = ListHelper.count_zero(lst, lambda obj: int(obj.replace(' ', '')) == 0)
         print('第{}行大于零的有:{}个  '.format(row+1,select_result), end='')
         [print(_, end='') for _ in zero]
         print()

def main(rows,count):
        file = open('12345.txt', 'a')
        for row in range(rows):
                lst = [num for num in data_yield(count)]
                file.writelines(lst)
                file.write('\n')
                print_result(row, lst)               
        file.close()
                                
if __name__ == '__main__':
        rows = 211876
        count = 3000
        main(rows,count)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表