0

私は以前、ファイル内の情報を整理するプログラムに関係なく質問を投稿しました: Is there a way to Organ file content by list element in python?

次のコードを使用して、情報を新しいファイルに書き込もうとしています

def main():
    #open the file
    info = open('Studentinfo.txt', 'r')
    #make file content into a list
    allItems = []
    #loop to strip and split
    for i in info:
        data = i.rstrip('\n').split(',')
        allItems.append(data)

    allItems.sort(key=lambda x: x[3]) # sort by activity

    for data in allItems:
        first = data[1]
        last = data[0]
        house = data[2]
        activity = data[3]
        a = str(first)
        b = str(last)
        c = str(house)
        d = str(activity)
    f = open('activites.txt', 'w')
    f.write(a)
    f.write(b)
    f.write(c)
    f.write(d)
    f.close()

main()

ただし、代わりに新しいテキストファイルを開くと

Amewolo, bob J.,E2,none
Andrade, Danny R.,E2,SOCCER
Banks-Audu, Rob A.,E2,FOOTBALL
Anderson, billy D.,E1,basketball
souza, Ian L.,E1,ECO CLUB
Garcia, Yellow,E1,NONE
Brads, Kev J.,N1,BAND
Glasper, Larry L.,N1,CHOIR
Dimijian, Annie A.,S2,SPEECH AND DEBATE

しかない

 Amewolo, bob J.,E2,none

なぜpythonは最初の行だけを書くのですか

4

1 に答える 1

5

一度に 1 つずつデータの各セットを書き込むのではなく、for ループの後にファイルに書き込むだけです。つまり、すべてのデータを反復処理してから、ファイルを開き、最後の 4 つの項目を書き込んでから閉じます。

ファイルを開き、すべてを書き込み、閉じる必要があります。これを試して

f = open('activites.txt', 'w') # open the file first
for data in allItems: # iterate over all of the data
    first = data[1]
    last = data[0]
    house = data[2]
    activity = data[3]
    a = str(first)
    b = str(last)
    c = str(house)
    d = str(activity)
    f.write(a) # write each element out
    f.write(b)
    f.write(c)
    f.write(d)
f.close() # then close

ただし、str()通話は不要です。 firstlasthouse、およびactivityはすでに文字列になります。

ステートメントと組み合わせるとwith、この全体が崩壊する可能性があります

with open('activites.txt', 'w') as f:
    for data in allItems:
        data = [data[0], data[1]] + data[2:]
        print(*data, file=f, sep=', ')
于 2013-04-20T21:24:42.013 に答える