1

基于此文件中一行的示例

1:alpha:beta

我正在尝试让 python 读取文件,然后逐行打印第二个之后的内容':'

import fileinput
#input file

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

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

这不会产生任何结果,但是从单行的控制台会话中它可以正常工作

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

如果它是第二个 ':' 之后的所有内容作为字符串(可以包括 ':'),则使用 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

对于给定的数据格式,这将起作用:

 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 回答
1

函数返回的值不会在非交互模式下自动发送到标准输出,您必须显式打印它们。

因此,对于 Python 2,使用print line.split(strip_char, 2)[2]. 如果你曾经使用过 Python 3,它将是print(line.split(strip_char, 2)[2]).

(乔恩克莱门茨的道具,我忘了你可以限制一个字符串被分割的次数。)

于 2012-07-12T13:31:12.767 回答
0

你得到的只是'beta',因为 join 给你一个字符串:

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 回答