我是一個完整的Python noob。如何從文件中每行的開頭刪除兩個字符?我是想這樣的事情:如何從行首開始刪除兩個字符
#!/Python26/
import re
f = open('M:/file.txt')
lines=f.readlines()
i=0;
for line in lines:
line = line.strip()
#do something here
我是一個完整的Python noob。如何從文件中每行的開頭刪除兩個字符?我是想這樣的事情:如何從行首開始刪除兩個字符
#!/Python26/
import re
f = open('M:/file.txt')
lines=f.readlines()
i=0;
for line in lines:
line = line.strip()
#do something here
line = line[2:]
String slicing將幫助您:
>>> a="Some very long string"
>>> a[2:]
'me very long string'
只需用線[2:]
而不是使用一個for循環中,你可能會與AA列表中理解幸福:
[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:]
for line in open("file"):
print 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
你會發現蟒蛇有一些偉大的方式來處理字符串。一些其他有用的字符串方法可能需要檢查,如split(),replace()和startswith()/ endswith()。
這可能是有趣的,知道之間存在微妙的,但重要的區別:
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快。
由於您正在學習Python,我想補充一點,鑑於Python提供的工具(切片,拆分,替換以及所有其他提及的),您會發現對於許多任務來說,正則表達式是過度殺傷性的。所以
import re
在你的例子的開始可能會或可能不會被嚴格需要。
您應該閱讀教程(http://docs.python.org/tutorial/)。你在尋找什麼是正確的介紹(見「字符串」)。 – hop 2009-08-13 16:08:45