簡體   English   中英

讀取文件並將其解析為部分

[英]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.

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