Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python在Excel(.xlsx)中查找和替换字符串_Python_Excel_Replace_Find - Fatal编程技术网

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

使用Python在Excel(.xlsx)中查找和替换字符串,python,excel,replace,find,Python,Excel,Replace,Find,我试图替换.xlsx表中的一组字符串(~70k行,38列)。我有一个文件中要搜索和替换的字符串列表,格式如下:- bird produk - bird product pig - pork ayam - chicken ... kuda - horse 要搜索的单词在左侧,替换词在右侧(查找“bird produk”,替换为“bird product”)。My.xlsx工作表如下所示:- name type of animal ID ali pig

我试图替换.xlsx表中的一组字符串(~70k行,38列)。我有一个文件中要搜索和替换的字符串列表,格式如下:-

bird produk - bird product
pig - pork
ayam - chicken
...
kuda - horse
要搜索的单词在左侧,替换词在右侧(查找“bird produk”,替换为“bird product”)。My.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)
制作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\u A的想法类似,但使用字典进行“翻译”对于您来说,其中键是原始单词,每个键的值是它转换成的值。

要使用Python读写xls,请使用xlrd和xlwt,请参阅

一个简单的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'
}
当使用replace中的
'text'检查成员身份时,Dict将为您提供
O(1)
(大多数情况下,如果键没有碰撞)时间复杂性。没有比这更好的性能了


因为我不知道你的
字符串串是什么样子,所以这个答案可能不准确或不完整。

我会将你文本文件的内容复制到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

这是一个关于访问电子表格中的内容的问题,还是一个如何处理您在那里找到的内容的问题?@Scott Hunter如何处理我在.xlsx工作表中的内容。我可以读取该文件,但我需要根据另一个单独文件中的列表进行字符串匹配,并用新的字符串替换.xlsx中的字符串。我添加了一个示例在我的问题中@laike9m@antsemot我明白了。然后,正如我的第一个代码片段所示,您只需要迭代所有单元格值。我用5行(38列)测试了代码,耗时太长(>5分钟)。这正常吗?请参阅我的文章(已编辑)。我刚刚尝试读取单元格,但花了一段时间,因此我猜测读取、查找和替换单元格需要更长的时间。我已将内容复制到新的工作表中,并使用文本到列来分隔数据。我正在运行代码。我刚运行完代码,似乎某些字符串没有正确替换。并且这里有一些甚至没有被替换。请提供建议。如果只是其中一些有问题,我猜文本到列没有正确完成,并且在查找中文本周围有额外的空格。好的,谢谢,我会查找。顺便说一句,如果我想搜索整个单元格(而不仅仅是字符串的一部分),我应该将LookAt:=xlPart更改为LookAt:=xlother,对吗?是的,但这会使空格的问题变得更糟。要消除空格,可以使用
TRIM(…)
函数,然后复制和粘贴值。这应该是最简单的方法。