[英]Find and replace strings in Excel (.xlsx) using Python
我正在嘗試替換.xlsx工作表(〜70k行,38列)中的一堆字符串。 我有一個要搜索並替換為文件的字符串列表,格式如下:-
bird produk - bird product
pig - pork
ayam - chicken
...
kuda - horse
要搜索的詞在左側,而替換詞在右側(找到“ bird produk”,替換為“ bird product”。我的.xlsx工作表如下所示:-
name type of animal ID
ali pig 3483
abu kuda 3940
ahmad bird produk 0399
...
ahchong pig 2311
我正在尋找最快的解決方案,因為列表中大約有200個單詞要搜索,並且.xlsx文件很大。 我需要為此使用Python,但我對其他更快的解決方案持開放態度。
編輯:-添加工作表示例
Edit2:-嘗試了一些python代碼來讀取單元格,花費了相當長的時間。 有指針嗎?
from xlrd import open_workbook
wb = open_workbook('test.xlsx')
for s in wb.sheets():
print ('Sheet:',s.name)
for row in range(s.nrows):
values = []
for col in range(s.ncols):
print(s.cell(row,col).value)
謝謝!
Edit3:-我終於想通了。 VBA模塊和Python代碼都可以使用。 我改用.csv來簡化工作。 謝謝! 這是我的Python代碼版本:-
import csv
###### our dictionary with our key:values. ######
reps = {
'JUALAN (PRODUK SHJ)' : 'SALE( PRODUCT)',
'PAMERAN' : 'EXHIBITION',
'PEMBIAKAN' : 'BREEDING',
'UNGGAS' : 'POULTRY'}
def replace_all(text, dic):
for i, j in reps.items():
text = text.replace(i, j)
return text
with open('test.csv','r') as f:
text=f.read()
text=replace_all(text,reps)
with open('file2.csv','w') as w:
w.write(text)
我會將您的文本文件的內容復制到excel文件中的新工作表中,並將該工作表命名為“ Lookup”。 然后使用文本列,以獲取該新表的前兩列中從第一行開始的數據。
將以下代碼粘貼到Excel中的模塊中並運行它:
Sub Replacer()
Dim w1 As Worksheet
Dim w2 As Worksheet
'The sheet with the words from the text file:
Set w1 = ThisWorkbook.Sheets("Lookup")
'The sheet with all of the data:
Set w2 = ThisWorkbook.Sheets("Data")
For i = 1 To w1.Range("A1").CurrentRegion.Rows.Count
w2.Cells.Replace What:=w1.Cells(i, 1), Replacement:=w1.Cells(i, 2), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next i
End Sub
制作2個數組A [bird produk,pig,ayam,kuda] //要更改的單詞B [bird product,豬肉,雞肉,馬] //更改單詞后的結果
現在檢查excel的每一行,並將其與A的每個元素進行比較。如果我匹配,則將其替換為B的相應元素。
例如//不是實際的代碼,例如偽代碼
for (i=1 to no. of rows.)
{
for(j=1 to 200)
{
if(contents of row[i] == A[j])
then contents of row[i]=B[j] ;
break;
}
}
為了快速,您必須在替換單詞后立即停止當前迭代,然后檢查下一行。
與@coder_A的想法類似,但是使用字典為您完成“翻譯”,其中鍵是原始單詞,每個鍵的值就是將其轉換為的值。
要使用Python讀取和編寫xls,請使用xlrd和xlwt,請參見http://www.python-excel.org/
一個簡單的xlrd示例:
from xlrd import open_workbook
wb = open_workbook('simple.xls')
for s in wb.sheets():
print 'Sheet:',s.name
for row in range(s.nrows):
values = []
for col in range(s.ncols):
print(s.cell(row,col).value)
而要替換目標文本,請使用dict
replace = {
'bird produk': 'bird product',
'pig': 'pork',
'ayam': 'chicken'
...
'kuda': 'horse'
}
當'text' in replace
使用'text' in replace
檢查成員資格時,Dict將為您提供O(1)
(大多數情況下,如果鍵不沖突)的時間復雜度。 沒有比這更好的性能了。
由於我不知道您的bunch of strings
什么樣的,因此此答案可能不准確或不完整。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.