小编paw*_*lty的帖子

将包含"de","da"等的名称拆分为first,middle,last等

我想把巴西名字分成几部分.但是,有下面的名称,其中"de","da"(和其他)不是单独的部分,它们总是与下面的单词一起使用.所以正常分裂不起作用.

test1 = "Francisco da Sousa Rodrigues" #special split
test2 = "Emiliano Rodrigo Carrasco" #normal split
test3 = "Alberto de Francia" #special split
test4 = "Bruno Rezende" #normal split
Run Code Online (Sandbox Code Playgroud)

我的预期输出是:

[Francisco, da Sousa, Rodrigues] #1
[Emiliano, Rodrigo, Carrasco] #2
[Alberto, de Francia] #3
[Bruno, Rezende] #4
Run Code Online (Sandbox Code Playgroud)

对于特殊情况,我尝试了这种模式:

PATTERN = re.compile(r"\s(?=[da, de, do, dos, das])")
re.split(PATTERN, test1) (...)
Run Code Online (Sandbox Code Playgroud)

但输出不是我的预期:

['Francisco', 'da Sousa Rodrigues'] #1
['Alberto', 'de Francia'] #3
Run Code Online (Sandbox Code Playgroud)

知道怎么解决吗?有没有办法只使用一种模式"正常"和"特殊"情况?

python regex python-3.x

16
推荐指数
1
解决办法
1343
查看次数

pandas groupby with count,sum和avg

我在熊猫中有以下DF:

+---------+--------+--------------------+
| keyword | weight |   other keywords   |
+---------+--------+--------------------+
| dog     | 0.12   | [cat, horse, pig]  |
| cat     | 0.5    | [dog, pig, camel]  |
| horse   | 0.07   | [dog, camel, cat]  |
| dog     | 0.1    | [cat, horse]       |
| dog     | 0.2    | [cat, horse , pig] |
| horse   | 0.3    | [camel]            |
+---------+--------+--------------------+
Run Code Online (Sandbox Code Playgroud)

我想要执行的任务是按关键字进行分组,同时计算关键字频率,按权重平均并按其他关键字求和.结果将是这样的:

+---------+-----------+------------+------------------------------------------------+
| keyword | frequency | avg weight |                  sum other keywords            |
+---------+-----------+------------+------------------------------------------------+
| …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas

6
推荐指数
1
解决办法
2440
查看次数

标准化遗漏波兰语字符

我有一个包含人员数据的大数据框。我想压平所有奇怪的变音符号并将它们转换为最接近的 ascii 字符。基于我在 SO 中找到的解决方案,我执行以下操作:

for column in df.columns:
            df[column] = df[column].astype("str").str.normalize('NFKD').str.encode('ascii', errors='ignore').str.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

它适用于大多数情况(还没有全部检查过)但是我注意到它漏掉了字母 '?' 用波兰语。例如Lech Wa??sa被翻译成Lech Waesa而我的期望是看到Lech Walesa. 我的猜测是它是ignore参数在str.encode方法中的作用。知道如何使它适用于任何变音符号吗?

python python-3.x pandas

4
推荐指数
2
解决办法
2464
查看次数

gspread update_cell 很慢

我有两个谷歌电子表格:

QC- 很多列,我想检查第 4 列的值是否出现在第二个电子表格 lastEdited_PEID 中;如果是这样,它会放“宾果游戏!” 在找到值的同一行的第 14 列中

lastEdited- 一列,值的长电子表格

我使用以下代码实现了这一点:

#acces the documents on Drive
QC = gc.open_by_key("FIRST KEY").sheet1
lastEdited = gc.open_by_key("SECOND KEY").sheet1

#get values from columns and convert to lists 
QC_PEID = QC.col_values(4)
lastEdited_PEID = lastEdited.col_values(1)

#iterate by rows and check if value from each row appears in the second document
for value in QC_PEID:
    ind = QC_PEID.index(value)
    if value in lastEdited_PEID:
        QC.update_cell(ind, 14, 'Bingo!')
Run Code Online (Sandbox Code Playgroud)

所以它完成了这项工作,但它的执行速度非常慢(大约 5 分钟)。我担心速度,因为我必须为大约 50 个电子表格(每个平均 6000 行)执行操作。

我尝试使用循环中的以下代码在找到时从第二个列表中删除元素(它只能出现一次):

    for value in …
Run Code Online (Sandbox Code Playgroud)

python google-sheets python-3.x gspread

2
推荐指数
1
解决办法
1713
查看次数

Selenium webdriver 点击警报

我正在尝试抓取这个网站http://bombayhighcourt.nic.in/party_query.php。一切顺利,直到我第一次抓取结果并返回此页面。然后出现以下警报:在此处输入图片说明

我可以看到负责警报的代码是这样的:

function validate()
{
  with(document.pqueryfrm)
  {
    if(trim(m_party.value)=="")
    {
      alert("Enter Party Name");
      m_party.focus();
      return false;
    }
    if(m_party.value=="")
    {
      alert("Enter Party Name");
      m_party.focus();
      return false;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用此代码在此警报中单击“确定”,但它没有执行任何操作:

        try:
            WebDriverWait(s.mydriver, 3).until(EC.alert_is_present(),"Enter Party Name" )
            alert = s.mydriver.switch_to.alert()
            alert.accept()
            print("alert accepted")
        except TimeoutException:
            print ("no alert")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

UnexpectedAlertPresentException: Alert Text: None
Message: unexpected alert open: {Alert text : Enter Party Name}
  (Session info: chrome=55.0.2883.87)
  (Driver info: chromedriver=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 6.1.7601 SP1 x86_64)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python web-scraping python-3.x selenium-webdriver

2
推荐指数
1
解决办法
3260
查看次数

异步慢于同步

我的程序执行以下操作:

  • 获取txt文件的文件夹
  • 对于每个文件:
    • 读取文件
    • 使用文件内容对localhost中的API执行POST请求
    • 解析XML响应(不在下面的示例中)

我担心程序的同步版本的性能,所以试图aiohttp使其异步(这是我在Python中除了Scrapy之外的第一次异步编程尝试).原来,异步代码花了2倍的时间,我不明白为什么.

同步代码(152秒)

url = "http://localhost:6090/api/analyzexml"
package = #name of the package I send in each requests
with open("template.txt", "r", encoding="utf-8") as f:
    template = f.read()

articles_path = #location of my text files

def fetch(session, url, article_text):
    data = {"package": package, "data": template.format(article_text)}
    response = session.post(url, data=json.dumps(data))
    print(response.text)

files = glob(os.path.join(articles_path, "*.txt"))

with requests.Session() as s:
    for file in files:
        with open(file, "r", encoding="utf-8") as f:
                article_text = f.read()
        fetch(s, url, article_text)
Run Code Online (Sandbox Code Playgroud)

分析结果: …

python python-3.x python-requests python-asyncio aiohttp

1
推荐指数
1
解决办法
561
查看次数