使用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)的关联文件
示例解决方案输出为:
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,您使用的是什么版本的pythonreadline()
应返回字符串。
05 FILLER (optional) PIC X(width-of-report) VALUE
" AMOUNT DATE "(in column 72)
- ".