如何从一行的开头删除两个字符

时间:2009-08-13 09:31:53

标签: python

我是一个完整的Python菜鸟。如何从文件中每行的开头删除两个字符?我正在尝试这样的事情:

#!/Python26/

import re

f = open('M:/file.txt')
lines=f.readlines()

i=0;
for line in lines:
    line = line.strip()     
    #do something here

12 个答案:

答案 0 :(得分:73)

你有一个良好的开端。在你的循环中试试这个:

for line in lines:
    line = line[2:]
    # do something here

[2:]被称为“slice”语法,它实质上是说“给我这个序列的一部分,从索引2开始并持续到结尾(因为在冒号后没有指定结束点) )。

答案 1 :(得分:20)

String slicing会帮助您:

>>> a="Some very long string"
>>> a[2:]
'me very long string'

答案 2 :(得分:10)

不使用for循环,您可能会对列表理解感到满意:

[line[2:] for line in lines]

就像好奇心一样,请检查cut unix工具。

$ cut -c2- filename

-c的切片语法与python的非常相似。

答案 3 :(得分:10)

作为提示,您可以将程序缩短为

for line in open('M:/file.txt'):
    line = line[2:]

如果您还需要携带行号,请使用

for i, line in enumerate(open('M:/file.txt.')):
    line = line[2:]

答案 4 :(得分:3)

如果您想修改文件的内容,而不仅仅是处理字符串,请尝试fileinput的{​​{1}}参数:

inplace

然后,在命令行上:

# strip_2_chars.py
import fileinput
for line in fileinput.input(inplace=1):
  print line[2:]

答案 5 :(得分:3)

可能有趣的是要知道:

之间存在微妙但重要的区别
file = open( filename )
lines = file.readlines()
for line in lines:
   do something

file = open( filename )
for line in file:
    do something

第一个解决方案(带readlines)将在内存中加载文件的全部内容并返回一个python列表(字符串)。另一方面,第二种解决方案使用了一种叫做iterator的东西。实际上,这将根据需要在文件中移动指针并返回一个字符串。这有一个重要的好处:文件未加载到内存中。对于小文件,两种方法都可以。但只要您只逐行使用该文件,我建议直接使用迭代器行为。

所以我的解决方案是:

infile = open( filename )
outfile = open( "%s.new" % filename, "w" )
for line in infile:
    outfile.write( line[2:] )
infile.close()
outfile.close()

想一想:如果它是非ascii文件(例如latin-1编码),请考虑使用codecs.open。否则你可能会有一个令人讨厌的惊喜,因为你可能会意外地将多字节字符切成两半;)

但是,如果你不需要python,你唯一需要做的就是从文件中裁剪前两个字符,那么最有效的方法就是kch的建议并使用cut

cat filename | cut -d2- > newfile

对于这些快速和脏的文件操作,我总是在我的非Linux boxen上安装cygwin。但我相信这些工具还有一组Windows二进制文件,它们的运行速度比cygwin iirc快。

答案 6 :(得分:2)

line = line[2:]

答案 7 :(得分:2)

for line in open("file"):
    print line[2:]

答案 8 :(得分:1)

你会发现python有一些很好的方法来处理字符串。您可能想要检查的其他一些有用的字符串方法是split(),replace()和startswith()/ endswith()。

答案 9 :(得分:0)

只需使用第[2:]行

答案 10 :(得分:0)

由于你正在学习Python,我想补充一点,鉴于Python提供的工具(切片,拆分,替换以及所有其他已经提到过的工具),你会发现对于许多任务,正则表达式都是过度的。所以

import re

在您的示例开头可能会或可能不会严格需要。

答案 11 :(得分:-1)

效率不高但是确实有效。看起来很复杂。

print line[-(len(line)-2):]