簡體   English   中英

使用Python在Excel(.xlsx)中查找和替換字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM