[英]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的语法非常相似。
如果要修改一个文件的内容,而不是仅仅处理字符串,尝试fileinput
的inplace
参数:
# 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.