2013-11-28 80 views
1

我想用句號替換文件中的縮進,但我的腳本正在替換縮進線中的所有空格,而不僅僅是縮進。Python替換縮進與時期

lines = [line.strip('\n') for line in open('test0.py', 'r')] #create line array 
for l in lines: 
    #print l 
    data = l 
    while data.startswith(" "): 
     data=data.replace(data[0], ".") #replace start of line with "." 
    print data 

這裏是腳本錯誤輸出

import SimpleHTTPServer 
import BaseHTTPServer 
import ssl 

class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
....def.do_GET(self): 
........if.self.path.==.'/': 
............self.path.=.'test.html' 
........return.SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) 

Handler = MyRequestHandler 
server = BaseHTTPServer.HTTPServer(('192.168.2.3', 8080), Handler) 
server.socket = ssl.wrap_socket(server.socket, certfile='server.pem', server_side=True) 
server.serve_forever() 

我想獨自離開的空間的其餘部分縮進線。

+0

我看到一些空間在輸出......還有,你有沒有考慮一個不太幼稚的做法,只是打電話給'替換'? – Darkhogg

+0

@Darkhogg行中有空格不縮進,但縮進行中沒有空格。 –

回答

3

對不起,不能想到一個聰明的解決方案,所以這個怎麼樣:

rhs = data.lstrip() 
print '.' * (len(data) - len(rhs)) + rhs 

(看如何最佳性能可能不是非常重要的位置)

0

嘗試:

data.replace("\t", ".") 

它將用點替換所有列表的indendts。如果一個點是不夠的,作爲一個製表縮進具有總是相同的長度,你可以增加你更換通話點數:

data.replace("\t", ".......") 
1

你while循環內線錯誤地將替換所有空格用冒號。

變化

data=data.replace(data[0], ".")

到:

data="."+data[1:]

+0

這個答案解釋了原始代碼不起作用的原因('replace'替代了第一個參數的所有事件...) –

3
import re 


PATTERN = re.compile(r"^(+)", re.MULTILINE) 


with open("test0.py") as file: 
    content = file.read() 

content = PATTERN.sub(lambda m: "."*len(m.group(1)), content) 
print(content)