我最近不得不在我的網站上緊急複製我的數據庫。清理多個副本的文件
我使用我使用我的管理代碼在Python中創建的一些函數來抓取它。 數據庫被格式化,如:
Name:
Phone Number:
Has played the game:
一切都被複制在.txt
文件,但有時候,我發現像文件中的一些錯誤:
Name: Name: Name: Bob
我如何使用shell命令或Python清理這個爛攤子但保持相同的順序(我希望它仍然是名稱,電話號碼等)?
我最近不得不在我的網站上緊急複製我的數據庫。清理多個副本的文件
我使用我使用我的管理代碼在Python中創建的一些函數來抓取它。 數據庫被格式化,如:
Name:
Phone Number:
Has played the game:
一切都被複制在.txt
文件,但有時候,我發現像文件中的一些錯誤:
Name: Name: Name: Bob
我如何使用shell命令或Python清理這個爛攤子但保持相同的順序(我希望它仍然是名稱,電話號碼等)?
的說你db.txt
Phone Number:
Phone Number: Phone Number: Phone Number: 0118521358 Name: Name: Name: Name: Bob
Has played the game:
Name: Name: Name: Name: Bob
有這個你可以嘗試一點點這樣的腳本
import re
#create a new file called new_file
new_file=open("new_file",'w')
#open the database file with the discrepancies
file_with_error=open('db.txt','r')
#make a list of all your columns in the db
db_header=['Name:','Phone Number:']
#iterate through each line in your database file and find matches to replace
for line in file_with_error:
for col_name in db_header:
line=re.sub("(%s[ ]*)+" %(col_name,),col_name,line)
new_file.write(line) #write your new line your file
new_file.close()
exit(0)
您可以使用正則表達式來運行字符串匹配,並在您的文本文件中進行替換,修復此問題。 你可以用python或簡單的編輯器如notepad ++來做到這一點。 搜索表達式:
Name:.+(Name: (?!Name:).+)
與
$1
在文本文件中這個表達式替換它會發現,與
Name:
開頭的行並將其替換爲:
Name: Bob
我假設你知道如何在python中逐行讀取文本文件。假定你讀每一行成一個稱爲S
>>> s = "Name: Name: Name: Bob"
>>> s2 = "Name: Bob"
>>>
>>> s_split = s.split(":")
>>> s_split
['Name', ' Name', ' Name', ' Bob']
>>> result = ": ".join(s_split[-2:])
>>> result
' Name: Bob'
>>> result = ": ".join(s_split[-2:]).strip()
>>> result
'Name: Bob'
第一分割字符串將字符串分割成字符串,其中的列表:是分隔符。連接將使用列表中的最後兩個字符串,並將它們與以下內容一起加入:如果這條線是正常的,它可以工作。它也適用於任何數量的故障標籤
顯示您的TXT文件的一個較大的樣本。有時名稱是唯一的問題:重複?顯示每種類型的異名 –
唯一的問題是,有時,名稱,電話號碼已經玩過遊戲可以在我的文件中重複幾次在同一行 – rak007
除了python.what外殼你使用的是Linux?.. – repzero