1

ファイルからの行のこの例に基づく

1:alpha:beta

私はPythonにファイルを読み取らせてから、2行目以降に1行ずつ印刷しようとしています。':'

import fileinput
#input file

x = fileinput.input('ids.txt')
strip_char = ":"

for line in x:
    strip_char.join(line.split(strip_char)[2:])

これは結果を生成しませんが、1行のコンソールセッションからは正常に機能します

Python 2.7.3rc2 (default, Apr 22 2012, 22:35:38) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
data = '1:alpha:beta'
strip_char = ":"
strip_char.join(data.split(strip_char)[2:])
'beta'

私は何を間違っているのですか?ありがとう

4

4 に答える 4

1

2番目の':'以降の文字列(':'を含めることができます)の場合は、maxsplitオプションを使用します。例:

line.split(':', 2)[2]

例えば:

>>> d = '1:alpha:beta:charlie:delta'
>>> d.split(':', 2)
['1', 'alpha', 'beta:charlie:delta']

これにより、後で参加する手間が省けます

于 2012-07-12T13:34:33.550 に答える
1

関数によって返される値は、非対話型モードでは自動的にstdoutに送信されないため、明示的に出力する必要があります。

したがって、Python 2の場合は、を使用しますprint line.split(strip_char, 2)[2]。Python 3を使用する場合は、になりますprint(line.split(strip_char, 2)[2])

(Jon Clementsの小道具、文字列が分割される回数を制限できることを忘れました。)

于 2012-07-12T13:31:12.767 に答える
1

指定されたデータ形式の場合、これは機能します。

 with open('data.txt') as inf:
    for line in inf:
        line = line.strip()
        line = line.split(':')
        print ':'.join(line[2:])

'1:alpha:beta'出力は次のようになります'beta'

'1:alpha:beta:gamma'出力は次のようになります('beta:gamma' @JABがこれを指摘してくれてありがとう)

于 2012-07-12T13:32:51.157 に答える
0

joinは文字列を提供するため、「beta」だけを取得します。

data = '1:alpha:beta'
strip_char = ":"
strip_char.join(data.split(strip_char)[2:])
'beta'

これを試して:

lines=[]
with open('filePath', 'r') as f:
    for line in f.readlines():
        lines.append(line.strip())

for line in lines: print line.split(':')[1:]
于 2012-07-12T13:41:23.780 に答える