[英]reading a file and parse them into section
好的,所以我有一個包含ID號的文件,其名稱后面跟着這樣的名稱:
10亞歷克斯·德·蘇扎
11羅賓·范佩西
9種類似
我需要閱讀此文件,並將每條記錄分成2個字段,分別是ID和名稱。 我需要將條目存儲在字典中,其中ID是鍵,名稱是衛星數據。 然后,我需要在2列中每行輸出一個條目,字典中的所有條目都按ID(以數字方式)排序。 dict.keys和list.sort可能會有所幫助(我想)。 最后,輸入文件名必須是第一個命令行參數。
謝謝你的幫助!
到目前為止,我已經做到了,但是不能再進一步了。
fin = open("ids","r") #Read the file
for line in fin: #Split lines
string = str.split()
if len(string) > 1: #Seperate names and grades
id = map(int, string[0]
name = string[1:]
print(id, name) #Print results
我們需要sys.argv來獲取命令行參數(注意,腳本的名稱始終是返回列表的第0個元素)。
現在,我們打開文件(沒有錯誤處理,應該添加該文件)並逐行讀取。 現在,“行”列表中的每一行都有“ number firstname secondname”字符串。
然后打開一個空字典,並逐行循環遍歷各個字符串,將每個空格分開,並將它們存儲在臨時變量tmp(現在是字符串列表:('number','firstname','secondname')中) 。 接下來,我們只填充字典,使用數字作為鍵,並使用空格連接的其余名稱作為值。
要打印已排序的字典,只需使用key = int選項進行數字排序即可循環遍歷sorted(out)返回的數字列表。 然后通過使用ID的字符串表示形式調用字典來打印ID(數字)和相應的值。
import sys
try:
infile = sys.argv[1]
except IndexError:
infile = input('Enter file name: ')
with open(infile, 'r') as file:
lines = file.readlines()
out = {}
for fullstr in lines:
tmp = fullstr.split()
out[tmp[0]] = ' '.join(tmp[1:])
for id in sorted(out, key=int):
print id, out[str(id)]
這適用於帶ASCII字符串的python 2.7。 我非常確定它也應該能夠處理其他編碼(至少是德國Umlaute可以工作),但是我無法對其進行進一步的測試。 如果輸入文件的格式有所不同,您可能還想添加很多錯誤處理。
只是一個建議,此代碼可能比發布的其他代碼更簡單:
import sys
with open(sys.argv[1], "r") as handle:
lines = handle.readlines()
data = dict([i.strip().split(' ', 1) for i in lines])
for idx in sorted(data, key=int):
print idx, data[idx]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.