使用python计算文件中单词之间的空格数?

使用python计算文件中单词之间的空格数?,python,parsing,file-io,delimiter,cobol,Python,Parsing,File Io,Delimiter,Cobol,我真的很接近。我通读了“”,它确实提供了这一行: counts = [(len(list(cpart))) for c,cpart in groupby(s) if c == ' '] 但我真的不明白。。。我理解,或者我假设,C是分隔符,S是分组依据,并且将结果列表(python的新成员,array?)放入计数(S是指以前实例化的变量) 我如何确定这样的事情? 我正在创建一个程序,允许我查看随机创建的COBOL输出文件头,并使用它创建PIC(X)的关联文件 示例解决方案输出为: picx(30

我真的很接近。我通读了“”,它确实提供了这一行:

counts = [(len(list(cpart))) for c,cpart in groupby(s) if c == ' ']
但我真的不明白。。。我理解,或者我假设,C是分隔符,S是分组依据,并且将结果列表(python的新成员,array?)放入计数(S是指以前实例化的变量)

我如何确定这样的事情? 我正在创建一个程序,允许我查看随机创建的COBOL输出文件头,并使用它创建PIC(X)的关联文件

示例解决方案输出为:
  • picx(30)值空间
  • 图X(6)值“金额”
  • picx(8)值空间
  • 图X(4)值“日期” 重要的部分是数字。很明显,我可以确定字符串的长度,但我不确定如何确定空格

    以下是我到目前为止所做的工作,lol:

    from itertools import groupby
    from test.test_iterlen import len
    from macpath import split
    from lib2to3.fixer_util import String
    
    file = open("C:\\Users\\Joshua\\Desktop\\Practice\\cobol.cbl", 'r+')
    
    line1 = file.readline()
    split = line1.split()
    print (split)
    print ()
    
    counts = [(len(list(cpart))) for c,cpart in groupby(split) if c == ' ']
    
    print (counts)
    
    
    index = 0
    while index != split.__len__():
        if split[index].strip() != None:
            print ("PICX(" + ") VALUE " + "\"" + split[index] + "\".")
        elif counts[index] == None:
            print ("PICX(" + ") VALUE " + "\"" + split[index] + "\".") 
        index+=1
    

    我将首先解释第一行:

    counts = [(len(list(cpart))) for c,cpart in groupby(s) if c == ' ']
    
    s
    实际上是输入字符串。因此,要运行此功能,您首先需要:

    s = "   NAME          ACCOUNT#         DISCOUNT         DUE         DUE"
    
    groupby
    返回元组的迭代器。该元组中的第一个值是输入字符串中的字符,第二个值是另一个(嵌套的)迭代器,它将遍历字符的重复值。将其放入
    列表
    表格(用于说明)中,如下所示:

    groupby("hello!!!")
    [('h', ['h']), ('e', ['e']), ('l', ['l', 'l']), ('o', ['o']), ('!', ['!', '!', '!'])]
    
    因此,
    c
    不是分隔符,而是保存字符串
    s
    中每个字符的变量,
    cpart
    是遍历
    c
    所有连续值的迭代器。调用
    len(cpart)
    后,它会给出一个
    [c,c,c,…]
    列表(每个项目都是相同的!),该列表的长度是字符
    c
    重复的次数。通常只有一个。例如,对于
    'NAME
    '中的
    'A'
    ,您将得到
    c==A
    列表(cpart)==['A']
    。但是对于
    NAME
    ACCOUNT
    之间的空格,您将得到
    c='
    cpart=[''''','','','','','','','','',']

    括号内的整个内容
    []
    意味着它生成一个列表,就像您在
    for
    循环中附加到列表一样,每个项的值都是
    for
    前面的表达式。这里,是
    len(list(cpart))
    统计字符重复实例列表的长度。因此,它将是一个包含字符重复次数的列表。
    如果c=''
    意味着只有当该字符是空格时,才会将该项添加到列表中


    以上将计算空间。要计算单词数(例如,要获得picx(6)值“AMOUNT”),您只需执行以下操作:

    word_counts = [ len(word) for word in s.split() ]
    

    其中,
    split
    (您已经使用过)返回以前由空格分隔的一个字符串组成的单词列表。

    这样分解输出没有什么特别的意义。你可以:

         05  FILLER (optional) PIC X(width-of-report) VALUE
         "                              AMOUNT        DATE             "(in column 72)
    -                         ".
    
    第7列中的“-”表示字母数字文字的延续,不需要开始引号,但需要结束引号


    您创建的过程非常简单。您总是输出这三行,您所要做的就是将数据“切碎”为59字节(第二行),第三行“切碎”(不知道报告宽度)。

    以下是我到目前为止所做的,以表明我正在使用一些编码注释:不要使用
    s.\u len_uuuu()
    ,而是使用
    len(s)
    ;不要使用
    a==None
    a!=无
    ,如果a是无或
    a不是无
    ,请使用
    。你是上帝派来的人。这当然很有帮助,但现在我正在努力处理readline()。因为它不是一根绳子?我想在将readline()变量放入groupby@HarmJosh,您使用的是什么版本的python
    readline()
    应返回字符串。
         05  FILLER (optional) PIC X(width-of-report) VALUE
         "                              AMOUNT        DATE             "(in column 72)
    -                         ".