从文本文件切片线

时间:2013-10-30 06:45:06

标签: string python-2.7 slice

我正试图从文本文件中的多行中获取前10个字符。这就是我的线条:

Mon-000101,100.27242,9.608597,11.082,10.034,0.39,I,0.39,I,31.1,31.1,,double with 1355,,,,,,,,
Mon-000171,100.2923,9.52286,14.834,14.385,0.45,I,0.45,I,33.7,33.7,,,,,,,,,,
Mon-000174,100.27621,9.563802,11.605,10.134,0.95,I,1.29,I,30.8,30.8,,,,,,,,,,
Mon-000191,100.28709,9.495832,9.231,8.105,1,I,1.01,I,0,0,,on spike,,,,,,,,

我只想要各行的Mon-000101部分。我知道我通常会这样做:

line[0:10]
瞧,瞧,我已经拥有了。但是我试图在整个文件中执行此操作,而我只得到第一个结果。

这是我认为可能有用的微小代码:

f = raw_input("Enter the path and filename of the file: ")
f1 = open(f)
for line in f1:
    print line

但它只给了我切片的第一行(正确切片)。这有可能在所有线路上完成吗?

新信息:看来我的文字文件只是一条长线,这就解释了为什么我只打印出第一张ID。我需要帮助搞清楚如何只提取ID(Mon-######)。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

In [47]: %paste
with open('blah') as infile:
  line = []
  for char in itertools.chain.from_iterable(infile):
    if line.count(',') < 20:
      line.append(char)
    else:
      print ''.join(line[:10])
      line = [char]

## -- End pasted text --
Mon-000101
Mon-000171

Mon-00017
Mon-000191

答案 1 :(得分:0)

如果没有关于文件实际格式的更多信息,回答这个问题会有点困难。你说它实际上可能是一行,但这是否意味着你认为行之间没有真正的分隔符,或者它只是不是换行符?

如果您有其他分隔符,可以尝试:

with with open(filename) as f:
    data = f.read() # read all data into one string

for line in data.split(whatever_the_real_line_delimiter_is):
    print line[:10]

另一方面,如果确实没有分隔符,则需要依赖要查找的项目的详细信息来识别它们。正则表达式搜索可以做到这一点:

import re

with open(filename) as f:
    data = f.read() # read all data into one string

for value in re.finditer(r'Mon-\d{6}', data):
    print value

如果你想要抓取的某些值实际上并不是以Mon开头,那么你必须修改模式以匹配它们,但如果你知道你的话,这不应该太复杂正在寻找。