0

我试图从文本文件的多行中获取前 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-######)。

谢谢您的帮助。

4

2 回答 2

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
于 2013-10-30T06:51:19.343 回答
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,则您也必须修改模式以匹配它们,但如果您知道要查找的内容,那应该不会太复杂。

于 2013-10-30T07:29:10.723 回答