1

10000行のファイルがあり、それらすべてが次の構造を持っている場合、Pythonでそれは可能ですか:

1、2、xvfrt ert5a fsfs4 df f fdfd56、234

または同様に、文字列全体を読み取り、7 列目から 17 列目までのすべての文字 (スペースを含む) を別の文字列に格納すると、新しい文字列は次のようになります。

"xvfrt ert5a" ?

どうもありがとう

4

7 に答える 7

7
lst = [line[6:17] for line in open(fname)]
于 2009-11-10T18:18:40.363 に答える
5
another_list = []
for line in f:
    another_list.append(line[6:17])

またはジェネレータとして(メモリに優しいソリューション):

another_list = (line[6:17] for line in f)
于 2009-11-10T18:17:36.653 に答える
2

マイケル・ディロンの答えをもう少し進めます。「6 列目から 17 列目」が「3 番目のコンマ区切りフィールドの最初の 11 文字」を意味する場合、これはcsvモジュールを使用する良い機会です。また、Python 2.6 以降では、ファイルを開くときに 'with' ステートメントを使用することがベスト プラクティスと見なされています。見よ:

import csv
with open(filepath, 'rt') as f:
  lst = [row[2][:11] for row in csv.reader(f)]

これにより、先頭の空白が保持されます。それが望ましくない場合は、最後の行を次のように変更します

  lst = [row[2].lstrip()[:11] for row in csv.reader(f)]
于 2009-11-11T15:09:54.373 に答える
1

これは技術的に直接の質問に答えます:

lst = [line[6:17] for line in open(fname)]

しかし致命的な欠陥があります。使い捨てのコードは問題ありませんが、そのデータは不審にカンマ区切りの値のように見え、3 番目のフィールドはスペースで区切られたデータのチャンクでさえある可能性があります。最初の 2 つの列が余分な数字を発芽させた場合でも機能するように、次のようにする方がはるかに優れています。

lst = [x[2].strip()[0:11] for x in [line.split(',') for line in open(fname)]]

そして、これらのスペースで区切られたチャンクが長くなる可能性がある場合、これは次のとおりです。

lst = [x[2].strip().split()[0:2] for x in [line.split(',') for line in open(fname)]]

何が起こっているのかを説明するコメントを忘れないでください。多分:

# on each line, get the 3rd comma-delimited field and break out the 
# first two space-separated chunks of the licence key

もちろん、それらがライセンスキーであると仮定します。コメントで抽象的になりすぎる必要はありません。

于 2009-11-10T19:54:51.770 に答える
1

10,000行のそれぞれからのデータをどのように保存したいかは言いません-それらをリストに入れたい場合は、次のようにします:

my_list = []

for line in open(filename):
    my_list.append(line[7:18])
于 2009-11-10T18:17:44.460 に答える
0
for l in open("myfile.txt"):
   c7_17 = l[6:17]
   # Not sure what you want to do with c7_17 here, but go for it!
于 2009-11-10T18:16:51.467 に答える
0

この関数は、必要な文字列を計算して出力します

def readCols(filepath):
    f = open(filepath, 'r')
        for line in file:
            newString = line[6:17]
            print newString
于 2009-11-10T18:19:29.090 に答える