Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何删除一行开头的两个字符_Python - Fatal编程技术网

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

Python 如何删除一行开头的两个字符,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 将帮助您: >>> a="Some very long string" >>> a[2:] 'm

我是个彻头彻尾的巨蟒迷。如何删除文件中每行开头的两个字符?我试着这样做:

#!/Python26/

import re

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

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

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

只需使用第[2:][/p>行,您就有了一个良好的开端。在循环中尝试以下操作:

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

[2:]被称为“”语法,它本质上是说“给我这个序列中从索引2开始一直到结尾的部分(因为冒号后面没有指定终点)。

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

[line[2:] for line in lines]

出于好奇,一定要检查
cut
unix工具

$ cut -c2- filename

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

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

for line in open('M:/file.txt'):
    line = line[2:]
如果您也需要携带行号,请使用

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

如果要修改文件内容,而不仅仅是处理字符串,请尝试
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

您会发现python有一些很好的处理字符串的方法。您可能还想查看其他一些有用的字符串方法,如split()、replace()和startswith()/endswith()。

了解以下方法之间的细微但重要的区别可能会很有趣:

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

第一个解决方案(使用
读取行
)将文件的全部内容加载到内存中,并返回一个python列表(字符串).另一方面,第二种解决方案使用了称为a的东西。这实际上会根据需要移动文件中的指针并返回字符串。这有一个重要的好处:文件不会加载到内存中。对于小文件,两种方法都可以。但只要您只逐行处理文件,我建议使用ite直接改变行为

因此,我的解决方案是:

infile = open( filename )
outfile = open( "%s.new" % filename, "w" )
for line in infile:
    outfile.write( line[2:] )
infile.close()
outfile.close()
请考虑一下:如果它是非ASCII文件(例如LATI-1编码),请考虑使用。否则,您可能会有一个令人讨厌的意外,因为您可能会意外地将多字节字符切成两半; 但是,如果您不需要python,只需要从文件中裁剪前两个字符,那么最有效的方法是kch的建议并使用
cut

cat filename | cut -d2- > newfile

对于这些快速而肮脏的文件操作,我总是在我的非linux boxen上安装。但我相信这些工具也有一套windows二进制文件,它们的执行速度比cygwin iirc快。

既然您正在学习Python,我想补充一点,因为Python提供了各种工具(切片、拆分、替换和所有提到的其他任务),您会发现对于许多任务来说,正则表达式都是多余的

import re

在您的示例开始时,可能严格需要,也可能不需要。

效率不高,但确实有效。看起来相当复杂

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

您应该阅读教程()。您想要的内容在介绍中是正确的(请参阅“字符串”).+1用于在问题的上下文中提供答案和初学者级别的解释。为什么这不提供答案?它确实提供了答案,只是数据看起来很复杂。请解释涉及纯编码时的逻辑。您的代码片段做什么,以及它如何解决问题。因为OP对python i来说是新的t将帮助他更好地理解代码。
cat filename | cut -d2- > newfile
import re
print line[-(len(line)-2):]