基于文件
中一行的示例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'
我做错了什么?感谢
答案 0 :(得分:1)
函数返回的值不会在非交互模式下自动发送到stdout,您必须明确打印它们。
因此,对于Python 2,请使用print line.split(strip_char, 2)[2]
。如果您使用过Python 3,它将是print(line.split(strip_char, 2)[2])
。
(对于Jon Clements的道具,我忘了你可以限制一个字符串分裂的次数。)
答案 1 :(得分: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指出这一点)
答案 2 :(得分:1)
如果它是第二个':'之后的所有内容(包括':'),那么请使用maxsplit选项,例如:
line.split(':', 2)[2]
例如:
>>> d = '1:alpha:beta:charlie:delta'
>>> d.split(':', 2)
['1', 'alpha', 'beta:charlie:delta']
这样可以节省之后的加入
答案 3 :(得分: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:]