簡體   English   中英

你如何為python中的特定輸入元素收集數據?

[英]How do you collect data for a specific input element in python?

所以我在名為 data.txt 的文本文件中有這些數據

P005 NY 18/05/2021 23 40
P011 HK 16/05/2021 23 33
P023 TK 15/05/2021 24 41
P023 TK 15/05/2021 20 30

第一列是氣象站代碼,第二列是站名縮寫,第三列是日期,第四列是溫度,第五列是降雨量。 (請注意,列沒有標題)

我導入此文本並將它們存儲在五個列表中。

然后我要求用戶輸入氣象站代碼,我可以輸出從該站收集的數據。 什么是我被卡住的地方

特別是例如如果用戶輸入 P023 我的輸出應該是

TK 15/05/2021 24 41
TK 15/05/2021 20 30

我需要幫助,這樣我才能得到正確的輸出。 我的嘗試如下。

infile = open("data.txt",'r') 
assert isinstance(infile, object)
data = infile.read()
infile.close()
lines = data.split("\n")   

Station_ID = []
Station_Name = []
Date_Time = []
Temperature = []
Rainfall = []


for line in lines:         
               
    record = line.split( )
    Station_ID.append((record[0]))
    Station_Name.append(record[1])
    Date_Time.append(record[2])
    Temperature.append(record[3])
    Rainfall.append(record[4])
    

loop= True
while loop:         
    
    Choice = input("Press 1 to enter code")
     
    if Choice==1:
    
        RequestID = input("Enter valid Weather Station ID Code: ")

        # it is at this point where i have no clue what i have to do
                if RequestID in Station_ID:
                print (index, (value1, value2, value3, value4,) in enumerate(zip(Station_Name, Date_Time, Temperature, Rainfall))
                    
        
    elif choice%=2:
        print ("you will now exit")
    

我不知道你真正想要實現什么,但如果它符合你的需要,你可以嘗試以下方法:

from collections import defaultdict

with open('data.txt', 'r') as f:
   data = f.readlines()

data_dict = defaultdict(list)
for line in data:
    l = line.split()
    data_dict[l[0]].append(' '.join(l[1:]))

search_info = input("Provide station ID: ")
for station_ID, infos in data_dict.items():  
    if  station_ID == search_info:
        print(infos)

輸出:

Provide station ID: P023
['TK 15/05/2021 24 41', 'TK 15/05/2021 20 30']

我建議您使用集合模塊中的defaultdict ,其中默認值是一個列表:

from collections import defaultdict
data_dict = defaultdict(list)

並將數據存儲在那里:

infile = open("data.txt",'r') 
assert isinstance(infile, object)
data = infile.read()
infile.close()
lines = data.split("\n")

for line in lines:         
    record = line.split( )
    station, rest = record[0], record[1:]
    data_dict[station].append(rest)

所以你最終得到了data_dict這樣的結構:

defaultdict(list,
            {'P005': [['NY', '18/05/2021', '23', '40']],
             'P011': [['HK', '16/05/2021', '23', '33']],
             'P023': [['TK', '15/05/2021', '24', '41'],
              ['TK', '15/05/2021', '20', '30']]})

然后就可以通過key station訪問數據了:

data_dict['P023']
#=> [['TK', '15/05/2021', '24', '41'], ['TK', '15/05/2021', '20', '30']]

由於您已經將這些詳細信息存儲為列表,因此可以使用 Station_ID 的索引來查找所需的詳細信息,

if RequestID in Station_ID:
                 indx=Station_ID.index(RequestID)
                 print(Station_Name[indx],Date_Time[indx],Temperature[indx],Rainfall[indx])

下面的應該工作,至少在這種情況下

import numpy as np
path = 'yourpath\data.txt'


infile = open(path,'r') 
assert isinstance(infile, object)
data = infile.read()
infile.close()
lines = data.split("\n")   

Station_ID = []
Station_Name = []
Date_Time = []
Temperature = []
Rainfall = []


for line in lines:         
               
    record = line.split( )
    Station_ID.append((record[0]))
    Station_Name.append(record[1])
    Date_Time.append(record[2])
    Temperature.append(record[3])
    Rainfall.append(record[4])
    
result=[];

Choice = input("Press 1 to enter code: ")
     
if int(Choice) == 1:
    
    RequestID = input("Enter valid Weather Station ID Code: ")
    
    # it is at this point where i have no clue what i have to do
    
    for i in range(len(Station_ID)):
        
        if RequestID == Station_ID[i]:
            result=np.append(result, [Station_Name[i]+' '+Date_Time[i]+' '+Temperature[i]+' '+Rainfall[i]])
    
    print(result)

else:
    print ("you will now exit")

暫無
暫無

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

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