2013-12-17 46 views
0

我希望能夠使用python忽略空格和空格來獲取java文件每行的長度。我最終將每行長度放入一個數組中。把這個Java文件:使用python獲取Java文件中的行長度

public class HelloWorld { 

    public static void main(String[] args) { 
     System.out.println("Hello world"); 
    } 

} 

此文件的陣列將改爲:

{22,34,33,1,1,} 

什麼是去了解它的最好方法?我不僅能夠創建數組,而且還能如何找到每行的長度?

+2

你能在線的陣列分割文件了,通過他們迭代,通過線[I] .Count中獲得它們的長度( )? – Floris

+0

在沒有任何東西替換空白後,您可以使用len()中的build。 – frlan

+0

你怎麼得到第二條線34? –

回答

2

專注於你的問題的一部分「我怎樣才能找到每一行的長度?」,你可以使用這段代碼。

bad_chars = ' \t\n\r' 

def count_chars(): 
    with open('someclass.java', 'r') as javafile: 
     for line in javafile: 
      cleaned = filter(lambda c: c not in bad_chars, line) 
      if cleaned: 
       yield len(cleaned) 

你絕對可以,也應該重構這個滿足您的需求(也許有java的文件名作爲函數參數),但是這應該給你一個非空白罪狀,由不包括bad_chars字符定義。

返回值:

>>> print list(count_chars()) 
[22, 35, 33, 1, 1] 
1

做這樣的事情:

for line in open('file.java', 'r'): 
     lineLength = len(line.replace(' ', '')) 
+1

他的期望輸出與每行中非空白字符的數量相匹配,而不僅僅是兩端。另外,他說「忽略空間和空白空間」。 – willy

+1

ahh謝謝...我還是沒有得到34的第二行...但是閱讀理解:P –

+0

是的,不知道如果我錯了或他做了,但我計算35非空白,並會有更接近40與空白。 – willy

2

{a, b, c}符號在Python是一種set,你不希望(不重複的項目允許的);嘗試list,[a, b, c]

要從行首和行末刪除空格,請使用str.strip();這將刪除行首和行尾的製表符/空格/換行符。要刪除行內空間,請使用str.replace(' ', '')。一旦刪除了多餘的字符,該行的長度就是len(line)

您可以使用列表中理解一個步驟來創建列表,文件f

output = [len(l) for l in (line.strip().replace(' ', '') 
          for line in f) if len(l) > 0] 

給我[22, 35, 33, 1, 1]

+0

OP想擺脫空白,不僅是''。 – Raiyan

1

這應該工作:

with open('input') as f: 
    output = [] 
    for line in f: 
     line = line.split() 
     if line != [] : 
      line = "".join(line) 
      output.append(len(line)) 
    print output