我是一个完整的Python菜鸟。如何从文件中每行的开头删除两个字符?我正在尝试这样的事情:
#!/Python26/
import re
f = open('M:/file.txt')
lines=f.readlines()
i=0;
for line in lines:
line = line.strip()
#do something here
答案 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):]