繁体   English   中英

如何从行首删除两个字符

[英]How to remove two chars from the beginning of a line

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

#!/Python26/

import re

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

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

您开了一个好头。 在您的循环中尝试:

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

[2:]被称为“ 切片 ”语法,它的本质是“给我该序列的一部分,该部分从索引2开始并一直结束(因为在冒号之后未指定终点)。

字符串切片将帮助您:

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

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

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

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

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

与其使用for循环,不如使用列表理解功能:

[line[2:] for line in lines]

出于好奇,请检查cut unix工具。

$ cut -c2- filename

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

如果要修改一个文件的内容,而不是仅仅处理字符串,尝试fileinputinplace参数:

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

然后,在命令行上:

python strip_2_chars.py m:\file.txt

知道两者之间存在细微但重要的区别可能很有趣:

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更快。

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

您会发现python有一些处理字符串的好方法。 您可能要检出的其他一些有用的字符串方法包括split(),replace()和startswith()/ endswith()。

只需使用行[2:]

由于您正在学习Python,因此我想补充一下,鉴于Python提供的工具(切片,拆分,替换以及所有其他提到的工具),您会发现对于许多任务而言,regex是过大的。 所以

import re

在您的示例开始时,可​​能不一定会严格要求。

不是很有效,但是可以。 看起来很复杂。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM