0

テキスト ファイルを読み込んで、各行をリストに変換しました。

このスクリプトを使用して:

l = [s.strip().split() for s in open("cluster2.wcnf").readlines()]

どうすればいいですか:

  1. 開くファイルは静的ではなく動的ですか?つまり、ユーザーは開くファイルを選択します。
  2. リストに変換された後に読み取る特定の行を選択します。
  3. リスト内の値にオブジェクトを割り当てる
  4. 各行の最初、最後、またはいくつかの値を選択しますか?

前もって感謝します

4

5 に答える 5

1

まず第一に、あなたは.readlines()あなたのリスト内包表記から脱落しなければなりません。
2 番目lは、リストのリストです。最初の行にアクセスするには、次のようにしますl[0]。最初の行の最初の要素は になりますl[0][0]

ただし、このようなアプローチではファイルの増加に関する問題は解決できないと私は信じています。動的とは、ファイルの動作ではなくファイル名を意味する場合、ユーザー入力から定義される変数のハードコードされたファイル名を置き換えることができます。

于 2009-12-15T17:15:33.120 に答える
0

これは、各行もリストに分割されているファイル全体を読み取るためのより最適化された方法です。

import csv, sys

# 1 - User specifies file
file = input('File: ')

f = open(file, 'r')
reader = csv.reader(f, delimiter=' ')
lines = list(reader)
f.close()

# 2 - Select specific lines
print lines[4]

# 3 - Assign to list
lines[4] = obj # makes the whole line into that obj
lines[4][0] = obj # replaces the first item on the line with that obj

# 4 - Select first, last or a number of values
print lines[4][0] # first item in line 4
print lines[4][-1] # last item in line 4
print lines[4][1:4] # 2nd, 3rd and 4th items in line 4
于 2009-12-15T17:52:29.080 に答える
0

番号 1: 開くファイルを動的にしたいというのは、開くファイル名をユーザーに入力してもらいたいということですか? その場合は、ファイル名を変数に格納するだけです。例えば:

name = "myfile.txt"

「cluster2.wcnf」を名前に置き換えます。

番号 4:

SilentGhost で言及されているインデックスを使用して、各行の最初のアイテムにインデックスを付けることができます (つまりl[0][0]、最後のアイテムを見るには、負のインデックスを使用できます。これl[0][-1]により、最初のリストの最後のアイテムが得られます。アイテムの範囲が必要な場合次のようなものを使用するl[0][2:6]と、インデックス 2、3、4、および 5 のアイテムが得られます。これは、範囲 [2,6) のアイテムです。

于 2009-12-15T17:28:16.993 に答える
0

ユーザーから取得した名前 (文字列を使用) でファイルを開く、リスト内のアイテムを選択/割り当てるなどのことは、非常に基本的な Python の概念です。あなたにできる最善のことは、Python に関する優れた本を読むことだと思います。Dive Into Pythonをお勧めします。

于 2009-12-15T17:26:13.113 に答える
0

あなたの質問の仕方は、あなたが自分のプログラムに最終的に何をさせたいのかはっきりしていないことを示しています。

まず、その行はファイルをリストに変換するだけではありません。それをタプルのリストに変換します。各タプルは、ファイル内の 1 行のスペースで区切られた値のセットです。

与えられたとおりにあなたの質問に答えますが、答えのいくつかはあなたをさらに混乱させるかもしれないと思います.

1 開くファイルは静的ではなく動的ですか? つまり、ユーザーは開くファイルを選択します。

"cluster2.wcf"文字列である必要はありません。変数にすることができます。質問を文字通りに読む場合は、コードを変更してそれを行う方法を次に示します。

filename = raw_input("Which file would you like to read: ")
l = [s.strip().split() for s in open(filename).readlines()]

ここで注意点。ファイルをリストに読み込むと、リストは次のようになります。

[('This', 'is', 'the', 'first', 'line.'),
 ('This', 'is', 'the', 'second', 'line.'),
 ('And', 'finally', 'the', 'last', 'line.')]

リストの各要素は、その行のすべての「単語」の追加リストです。スペースで区切られた文字グループとして定義されている単語。


2 リストに変換された後に読み取る特定の行を選択します。

この質問は紛らわしい質問です。あなたはすでにファイルを読んでいます。もう一度読みたいですか?あなたが実際に意味しているのは、「ファイルをリストに読み取った後、ファイルの特定の行を操作するにはどうすればよいですか?」ということだと思います。この質問にお答えします。

ファイルの各行は、リストの特定の要素に対応します。リスト要素には、0 から始まる番号でアクセスします。ファイルの最初の行はl[0]. 2 番目l[1]以降はl[-1]. Python の負のインデックスは、リストの末尾から逆方向にカウントされます。


3 オブジェクトをリストの値に割り当てます

これは、割り当てたいオブジェクトの種類や、オブジェクトを値に割り当てた後にリストで何をしたいかを指定しないため、混乱を招きます。これはあなたの質問を非常に文字通り取る答えです...

l[0] = object()

これにより、ファイルの最初の行を表すタプルを含んでいたリスト要素にオブジェクトが割り当てられます。これを前の回答と組み合わせると、リストの任意の要素にオブジェクトを割り当てる方法を理解できると思います。


4 各行の最初、最後、またはいくつかの値を選択しますか?

これは、それらをどのように選択するかによって異なります。個別に行う場合は、次のようにします。

first_word_of_first_line = l[0][0]
last_word_of_first_line = l[0][-1]
first_word_of_last_line = l[-1][0]
last_word_of_last_line = l[-1][-1]
first_five_words of_second_line = l[1][0:5] # The : is for specifying a range of values
last_five_words_of_first_line = l[0][-5:] # The : with no end means 'until the end'

残念ながら、最初の 2 行の最初の 4 語を取得する方法は次のとおりではありません。

first_four_words_of_first_two_lines = l[0:2][0:4] # DOESN'T WORK!!!

その理由は、リストから値の範囲を取得した結果がリストであり、[0:4]代わりに がそのリストに適用されるためです。実際に行うことは[0:4]、結果リストの各要素に適用して新しいリストを作成することです。これを行う方法は次のとおりです。

first_four_words_of_first_two_lines = [x[0:4] for x in l[0:2]]

これにより、次のような新しいリストが得られます (質問 1 の例を参照)。

[('This', 'is', 'the', 'first'),
 ('This', 'is', 'the', 'second')]

お役に立てば幸いです。私が言ったように、あなたの質問は物事についての混乱を示していると思います。しかし、彼らが何について混乱を示しているのかわからないので、できる限り答えようとしました.

于 2009-12-15T17:54:16.160 に答える