簡體   English   中英

Python從命令行讀取文件,並使用非常大的文件剝離“\ n \ r”

[英]Python read file from command line and strip “\n\r” with very large files

我是第一次學習python而且我剛剛了解到readlines()非常慢並且對內存負擔過重。 這很好,但是當我為具有多達10 ^ 6個輸入的數據結構類編程時,我相信運行時非常重要。

到目前為止,這是我的工作。 我還沒刪掉'\\ r'。

def generateListOfPoints(stuff):
    List = open(stuff).readlines()

    a = []

    for i in range(len(List)):
        a.append(List[i].rstrip('\n').split(","))

    return a

這是我嘗試用for循環(我聽說更好),但我得到的只是錯誤,我不知道發生了什么。

def generateListOfPoints(stuff):

    a = []
    with open(stuff) as f:
        for line in f:
            a.append(stuff.rstrip('\n').rstrip('\r').split(","))
    return a

line替換stuff stuff只是文件路徑,實際內容是line - 用於迭代生成器f的變量

a.append(line.rstrip('\n').split(","))

您可能希望將使用split line后形成的列表存儲為元組,這樣a將是一個元組列表,其中每個元組對應於文件中的line 你可以這樣做:

a.append(tuple(line.rstrip('\n').split(",")))

確保將變量命名為有意義。 命名一些stuff很方便,但顯然會導致錯誤。 下面的示例將其重命名為filename並修復了列表的附加line而不是文件名。

此外, rstrip函數將一組字符剝離,因此您可以在一個函數調用中刪除\\r\\n 所以你會:

def generateListOfPoints(filename):
    a = []
    with open(filename) as f:
        for line in f:
            a.append(line.rstrip('\r\n').split(","))
    return a

這將創建一個列表列表。 如果要在解決方案中展平內部列表,則需要使用extend而不是append

我建議你使用命令行解釋器進行實驗。 這使得學習rstring和split如何工作變得容易。 假設您按照建議開始使用行變量,您可能不會在列表中追加您想要的內容。 您也可以通過一次調用rstrip來刪除\\ n和\\ r \\ n。

python
>>> a = []
>>> line = "this,is,a,test\n\r"
>>> line.rstrip('\n\r')
'this,is,a,test'
>>> line.rstrip('\n\r').split(',')
['this', 'is', 'a', 'test']
>>> a.append(line.rstrip('\n\r').split(','))
>>> a
[['this', 'is', 'a', 'test']]

暫無
暫無

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

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