2009-08-13 24 views
25

我是一個完整的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 
+3

您應該閱讀教程(http://docs.python.org/tutorial/)。你在尋找什麼是正確的介紹(見「字符串」)。 – hop 2009-08-13 16:08:45

回答

59

你是一個良好的開端。在循環試試這個:

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

的[2:]被稱爲「slice」語法,它本質上說,「給我這個序列開始於指數2,並持續到結束(因爲沒有盡頭的一部分。點冒號後指定)

+5

+1用於在問題*和*的背景下爲初學者級解釋提供答案。 – mhawke 2009-08-14 02:04:14

20

String slicing將幫助您:

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

只需用線[2:]

10

而不是使用一個for循環中,你可能會與AA列表中理解幸福:

[line[2:] for line in lines] 

就像一個好奇,做檢查cut unix工具。

$ cut -c2- filename 

-c的切片語法與python非常相似。

10

就像一個尖,可以縮短你的程序

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

如果您需要攜帶的行數過多,使用

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

如果你想修改文件的內容,不只是處理字符串,請嘗試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 
1

你會發現蟒蛇有一些偉大的方式來處理字符串。一些其他有用的字符串方法可能需要檢查,如split(),replace()和startswith()/ endswith()。

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

0

由於您正在學習Python,我想補充一點,鑑於Python提供的工具(切片,拆分,替換以及所有其他提及的),您會發現對於許多任務來說,正則表達式是過度殺傷性的。所以

import re 

在你的例子的開始可能會或可能不會被嚴格需要。

-1

效率不高,但是確實有效。看起來相當複雜。

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

爲什麼這不能提供答案? – JJJ 2016-06-30 11:38:46

+0

它確實提供了答案 它只是看起來很複雜的dat – 2016-07-05 04:30:03

+0

請解釋何時涉及純編碼的邏輯。你的代碼片段做了什麼,它如何解決這個問題。由於OP是python的新手,它將幫助他更好地理解代碼。 – Jeet 2016-07-11 03:14:20

相關問題