10000行のファイルがあり、それらすべてが次の構造を持っている場合、Pythonでそれは可能ですか:
1、2、xvfrt ert5a fsfs4 df f fdfd56、234
または同様に、文字列全体を読み取り、7 列目から 17 列目までのすべての文字 (スペースを含む) を別の文字列に格納すると、新しい文字列は次のようになります。
"xvfrt ert5a" ?
どうもありがとう
10000行のファイルがあり、それらすべてが次の構造を持っている場合、Pythonでそれは可能ですか:
1、2、xvfrt ert5a fsfs4 df f fdfd56、234
または同様に、文字列全体を読み取り、7 列目から 17 列目までのすべての文字 (スペースを含む) を別の文字列に格納すると、新しい文字列は次のようになります。
"xvfrt ert5a" ?
どうもありがとう
lst = [line[6:17] for line in open(fname)]
another_list = []
for line in f:
another_list.append(line[6:17])
またはジェネレータとして(メモリに優しいソリューション):
another_list = (line[6:17] for line in f)
マイケル・ディロンの答えをもう少し進めます。「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)]
これは技術的に直接の質問に答えます:
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
もちろん、それらがライセンスキーであると仮定します。コメントで抽象的になりすぎる必要はありません。
10,000行のそれぞれからのデータをどのように保存したいかは言いません-それらをリストに入れたい場合は、次のようにします:
my_list = []
for line in open(filename):
my_list.append(line[7:18])
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!
この関数は、必要な文字列を計算して出力します
def readCols(filepath):
f = open(filepath, 'r')
for line in file:
newString = line[6:17]
print newString