0

以下で起こっていることを行うためのより効率的な方法はありますか? あると思いたいです。このスクリプトには特別な用途はありませんが、これを行うためのより効率的な方法を知っていると非常に便利です。

# Divides text into 10 lists.. you'll see what I mean.
# 5/21/2012

filename = "test.txt"

FILE = open(filename,"r")

# READ FILE WORD-BY-WORD:
f = open(filename,"r")
lines = f.readlines()
for i in lines:
    thisline = i.split(" ")

FILE.close()

# DIVIDE INTO 10 LISTS:
list1 = []
list2 = []
list3 = []
list4 = []
list5 = []
list6 = []
list7 = []
list8 = []
list9 = []
list10 = []

j = 0
while j < len(thisline):
    x = thisline[j]
    list1.append(x)
    j+=1
    if j >= len(thisline):
        break

    x = thisline[j]
    list2.append(x)
    j+=1
    if j >= len(thisline):
        break

    x = thisline[j]
    list3.append(x)
    j+=1
    if j >= len(thisline):
        break

    x = thisline[j]
    list4.append(x)
    j+=1
    if j >= len(thisline):
        break

    x = thisline[j]
    list5.append(x)
    j+=1
    if j >= len(thisline):
        break

    x = thisline[j]
    list6.append(x)
    j+=1
    if j >= len(thisline):
        break

    x = thisline[j]
    list7.append(x)
    j+=1
    if j >= len(thisline):
        break

    x = thisline[j]
    list8.append(x)
    j+=1
    if j >= len(thisline):
        break

    x = thisline[j]
    list9.append(x)
    j+=1
    if j >= len(thisline):
        break

    x = thisline[j]
    list10.append(x)
    j+=1
    if j >= len(thisline):
        break

print "list 1 = "," ".join(list1)
print "list 2 = "," ".join(list2)
print "list 3 = "," ".join(list3)
print "list 4 = "," ".join(list4)
print "list 5 = "," ".join(list5)
print "list 6 = "," ".join(list6)
print "list 7 = "," ".join(list7)
print "list 8 = "," ".join(list8)
print "list 9 = "," ".join(list9)
print "list 10 = "," ".join(list10)

# EOF
4

3 に答える 3

3

このプログラムの目的がファイルの行を読み取り、それらを単語に分割してから、N番目のリストにN番目から始まる10番目ごとの単語が含まれるように単語をリストに追加することである場合、次のようになります。します:

from itertools import izip, cycle

filename = "test.txt"
f = open(filename,"r")

lsts = list([] for _ in range(10))
oracle = cycle(lsts)

for line in f:
    parts = line.split(" ")

    for lst, part in izip(oracle, parts):
        lst.append(part)

f.close()

for index, lst in enumerate(lsts):
    print "list %u = " % (index+1,)," ".join(lst)
于 2012-05-22T05:26:08.727 に答える
1

これにより、短いリストがNoneで埋められます。必要に応じて、それらを簡単に除外できます

with open("test.txt") as f:
    result = zip(*map(None, *[(word for line in f for word in line.split())]*10))
于 2012-05-22T06:31:39.367 に答える
0

10 行のエントリがあるファイルがある場合、これは機能します。

line1, line2, line3, line4, line5, line6, line7, line8, line9, line10 = open('test.txt','r').readlines()

open().readlines()呼び出しは、必要な分割を行う任意の関数に置き換えることができます。入力ファイルの例を示すと、これに役立ちます。

しかし、インデックス付きシーケンスを使用できるのに、なぜ 10 個の変数を使用するのでしょうか?

lines = open('test.txt', 'r').readlines()
assert line1 == lines[0] # etc
于 2012-05-22T05:41:30.497 に答える