簡體   English   中英

Python代碼含義:str.split(line [:-1],',')

[英]Python Code meaning: str.split(line[:-1],',')

我有這段代碼:

f = open('scores.txt','r')
L = []
for line in f:
    L = L + map(float,str.split(line[:-1],','))
print(L)

當我對Python完全陌生時,能否請您解釋以下命令的含義及其參數:str.split(line [:-1],',')

您有一個scores.txt文件,其中包含很多數字。 這些數字用逗號分隔。 您逐行瀏覽文件並將所有這些數字放入一個大列表中。

每行以換行符號結尾。 這就是為什么用line[:-1]切掉最后一個符號的原因。

數字之間用逗號分隔,因此您可以選擇這行,並在每個逗號處使用line[:-1].split(',')對其進行剪切/分割。

從文件讀取時,您將所有內容讀取為文本。 為了允許進行進一步的計算,您告訴Python將其視為數字,更准確地說是浮點數/有理數。

順便說一句,我認為map在Python 3中無法像這樣工作。但是等效的代碼是:

f = open('scores.txt','r')
L = []
for line in f:
  L = L + [float(s) for s in line[:-1].split(',')]    
print(L)

這對於讀取文件的行是逗號分隔的浮點列表的文件來說非常糟糕(Python 2.x):

  1. 通過讀取每一line並手動剝離換行符來遍歷文件:
    • 錯誤: line[:-1]是剝離尾隨換行符的一種不好方法:它在具有\\ r \\ n的Windows上中斷
    • 更好:在Python 3中, open()默認為newline=None ,這將支持通用換行符,並正確處理\\ r,\\ n或\\ r \\ n。 或者,您可以顯式設置open(..., newline=??) 然后按原樣使用line ,不需要hacky line[:-1]
  2. str.split(line[:-1], ',')逗號分隔的一行float拆分為float字符串列表。 除了等效於line[:-1].split(',') 但是現在,由於有了換行符的支持,我們可以執行line.split(',') ,堆更清晰了。

  3. L = [] for line in f: L = L + map(float, str.split(line[:-1],','))是一種附加到列表列表的舊2.x方法。 我們也可以使用列表推導代替map(float, ...) 我們可以使用嵌套的列表理解來消除for line in f:循環中的for line in f: 所以:

    f = open('scores.txt','r') L = [ [ float(flt) for flt in line.split(',') ] for line in f ]

甚至更好的是,我們使用上下文處理程序來自動處理打開,關閉和相關異常。 因此,代碼簡化為:

with open('scores.txt','r') as f:
    L = [ [ float(x) for line in f x in line.split(',') ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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