使用Python在Excel (.xlsx) 中找到并替换字符串

2024-04-25 05:58:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试替换.xlsx工作表中的一组字符串(大约70k行,38列)。我有一个要在文件中搜索和替换的字符串列表,格式如下:

bird produk - bird product
pig - pork
ayam - chicken
...
kuda - horse

要搜索的单词在左侧,替换词在右侧(查找“bird produk”,替换为“bird produc”)。我的.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)

谢谢你!

编辑3:-我终于弄明白了。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)

Tags: 文件csv字符串代码textinforwith
4条回答

我会将文本文件的内容复制到excel文件中的新工作表中,并将该工作表命名为“查找”。然后使用“文本到列”从第一行开始获取此新工作表前两列中的数据。

将以下代码粘贴到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[鸟制品,猪肉,鸡肉,马]//改词后结果

现在检查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的想法,但是使用字典来为您进行“翻译”,其中键是原始单词,每个键的值是它被翻译成的内容。

生成2个数组 A[bird produk,pig,ayam,kuda]//需要更改的单词 B[鸟制品,猪肉,鸡肉,马]//改词后结果

现在检查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;
}
}

为了加快速度,必须在单词被替换后立即停止当前迭代并检查下一行。

相关问题 更多 >