[英]How to read numbers in text file using python?
我是python編程的新手,我正在通過編寫簡單的程序學習python。 這是我要執行的操作:如果我有一個包含數字的文本文件:將此說為f1.txt
f1.txt:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 15
fp = open('f1.txt')
a1=[]
a2=[]
a3=[]
a4=[]
lines = fp.readlines()
for ln in lines[0:len(lines)]:
line=ln.strip().split()
a1=line();
fp.close()
我想在a1中獲得第一列,在a2中獲得第二列,依此類推。 我知道上面的代碼可能是錯誤的,請告訴我哪里出錯了以及如何糾正它。 特別是我不理解命令'ln.strip()。split()'。 有人可以幫忙嗎?
您可以這樣做:
a1 = []
a2 = []
a3 = []
a4 = []
with open('f1.txt') as f:
for line in f:
data = line.split()
a1.append(int(data[0]))
a2.append(int(data[1]))
a3.append(int(data[2]))
a4.append(int(data[3]))
因此,首先,我們使用with
語句打開文件。 這樣可以確保即使出現錯誤也可以自動關閉文件。 這樣更好。 打開文件時, f
將是文件句柄。
現在,Python允許我們僅通過遍歷文件句柄來遍歷文件的各行。 因此, for line in f
它將自動遍歷所有行。 不需要先調用readlines()
,當然也不需要做lines[0:len(lines)]
,這實際上只會創建列表的副本-您也可以遍歷lines
。
現在,在循環內部,我們str.split
行代碼分成空白並用空格分隔-不帶參數str.split
將始終執行該操作。 str.split
返回一個列表,因此我們將其存儲在一個額外的變量中。 接下來,我們將每一列附加到正確的列表中。 當您希望將值轉換為數字時,我們會將其轉換為整數。
您提到的str.strip
基本上去除了字符串的任何前導或尾隨空格。 當我們使用不帶參數的str.split
,多余的空格也會被刪除,因此我們實際上並不需要它。
最后,將四個單獨的列表存儲在單獨的變量中很難維護。 您可以直接創建一個列表列表:
a = [[], [], [], []] # A list with four empty lists
然后,在循環內部,您可以將data[i]
附加到a[i]
:
for i, value in enumerate(line.split()):
a[i].append(int(value))
在enumerate
迭代時,您不僅將獲得值(僅在列表上進行迭代時將獲得該值),還將獲得索引。 所以用這個,我們得到的劈裂線中的每個元素的索引並可以自動追加到正確的子表a
。
data = []
for line in lines:
data.append([int(v) for v in line.split()])
要么
data = [[int(v) for v in line.split()] for line in lines]
編輯:要回答評論-下面的代碼將按要求的數字列表重新排列數據
numbers = zip(*data)
line[0], line[1]
等應該為您提供每行中的第一個,第二個等條目。
split()
函數將在空格處分隔給定的行,並返回條目列表。
您的縮進在for
循環中是錯誤的。 您希望包含在循環中的所有代碼都應縮進4個空格。
行a1= line()
不會執行任何操作。 語法a = A()
會設定a
等於一個函數的結果A()
或一類的新實例A
。 如果要將行添加到列表a1
,則需要使用a1.append(line)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.