0

このプログラムを書き直して、すべての data.txt をリストに取得し、都市を検索して、リスト オブジェクトと属性を使用してその都市の時刻とローカルを取得できるようにするにはどうすればよいですか?

データ.txt

City1
Time1
Local1
--------------
City2
Time2
Local2
--------------
City
Time
Local
--------------
City3
Time3
Local3
--------------

プログラム

class store:
    def __init__(self, city, time, local):
        self.city = city
        self.time = time
        self.local = local

    def readfile():
        row = "start"
        list = []
        infile = open("data.txt", "r", encoding="utf-8")
        while row != "":
            row = infile.readline()
            list.append(rad)
        infile.close()

store.readfile()
4

4 に答える 4

1
class City(object):
    def __init__(self, name, time, local):
        self.name = name
        self.local = local
        self.time = time

class Store(object):
    def __init__(self):
        self.data = {}

    def readfile(self, filename):
        with open(filename, 'r') as datafile:
            subdata = []
            for line in datafile:
                if line.startswith('----'):
                    city = City(subdata[0], subdata[1], subdata[2])
                    self.data[subdata[0]] = city
                    subdata = []
                else:
                    subdata.append(line.rstrip())

    def city_named(self, city_name):
        return self.data[city_name]

store = Store()
store.readfile('Data.txt')

example_city = store.city_named('City1')

print(example_city.name)
print(example_city.time)
print(example_city.local)
于 2013-09-07T18:23:51.383 に答える
1

ファイル全体を読み取り、次のように文字列に分割します。

with open('data.txt') as f:
    lst = f.read().split()

次に、破線を除外します。

lst = [s for s in lst if not s.startswith('-')]

次に、文字列の数が 3 で割り切れる場合、文字列を 3 つのグループに分割します。

lst3 = [lst[i:i+3] for i in range(0, len(lst), 3)]

最後に、クラスの変数を割り当てます。

for item in lst3:
    self.city, self.time, self.local = item
于 2013-09-07T18:09:32.593 に答える
0

ファイルがその単純で厳密な構造を維持している場合、これでうまくいきます。

def info_from_city(file,city):
    city += '\n'
    list = fh.readlines()
    city_index = list.index(city)
    time_index = list[city_index+1]
    local_index = list[city_index+2]

    return (time_index,local_index)

fh = open('data.txt')

print 'Time and local:'
print info_from_city(fh,'City2')

出力は次のとおりです。

Time and local:
('Time2\n', 'Local2\n')

(改行文字に注意してください - を使用してそれらを削除したい場合があります.replace('\n', ''))

リストの.index()メソッドは、特定のものstring(実際には任意のオブジェクトまたは不変型) の最も古いインスタンスのインデックスを返します。

于 2013-09-07T18:08:32.280 に答える