![](/img/trans.png)
[英]Strip /n from line and simultaneously do a replace in that line in Python
[英]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.