[英]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.