[英]Counting the number of spaces between words in a file using python?
我真的很亲密 我读了“ 每个单词之间的空格数 ”,它确实提供了这一行:
counts = [(len(list(cpart))) for c,cpart in groupby(s) if c == ' ']
但我真的不明白......我理解,或者假设,C是分隔符,S是你正在分组的,你把结果列表?(python的新内容,数组?)到计数(S表示先前实例化的变量)
AMOUNT DATE
NAME ACCOUNT# DISCOUNT DUE DUE
我正在创建一个程序,允许我查看随机创建的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(s)
返回元组的迭代器。 该元组中的第一个值是输入字符串中的字符,第二个值是另一个(嵌套的)迭代器,它将迭代字符的重复值。 放入list
表单(用于说明)它看起来像这样:
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
和list(cpart) == ['A']
。 但是对于NAME
和ACCOUNT#
之间的空格,你会得到c == ' '
和cpart == [' ',' ',' ',' ',' ',' ',' ',' ',' ',' ']
。
整个事物位于方括号[]
意味着它生成一个列表,就好像你要附加到for
循环中的列表一样,每个项的值是for
之前的表达式。 这里是len(list(cpart))
,它计算字符重复实例列表的长度。 因此,它将是一个列表,其中包含重复字符的次数。 if c == ' '
表示只有当该字符是空格时才会将该项添加到列表中。
以上将计算空间。 要计算单词(例如,要获得PIC X(6)VALUE“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字节(对于第二行)和第三行的“其余”(不知道您的报告宽度)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.