簡體   English   中英

使用python計算文件中單詞之間的空格數?

[英]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)的關聯。

示例解決方案輸出將是:

  1. PIC X(30)VALUE SPACES。
  2. PIC X(6)值“AMOUNT”。
  3. PIC X(8)值空間。
  4. PIC X(4)VALUE“DATE”。

重要的部分是數字。 我可以明確地確定字符串的長度,但空間我不知道如何...

這是我到目前為止表明我正在工作大聲笑:

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 == Alist(cpart) == ['A'] 但是對於NAMEACCOUNT#之間的空格,你會得到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM