RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-590966

Dato Dato's questions

Martin Hope
Dato Dato
Asked: 2025-02-07 12:34:00 +0000 UTC

如何从一个表中删除另一个表中所存在的行?

  • 5

有两个数据框:

  Reg_x    name BS_name Sector_name Reg_y   tac
0    IR  IR1400  IR1400  IR1400_053    IR  5286
1    IR  IR1397  IR1397  IR1397_053    IR  5286
  Reg    name BS_name Sector_name
0  IR  IR1400  IR1400  IR1400_053
1  IR  IR1400  IR1400  IR1400_052
2  IR  IR1400  IR1400  IR1400_051
3  IR  IR1397  IR1397  IR1397_053
4  IR  IR1397  IR1397  IR1397_052
5  IR  IR1397  IR1397  IR1397_051
3  IR  IR1307  IR1307  IR1307_053
4  IR  IR1307  IR1307  IR1307_052
5  IR  IR1307  IR1307  IR1307_051

我如何从第二个表中保存第一个表中不存在的名称?在这种情况下,您需要获得如下表格:

  Reg    name BS_name Sector_name
0  IR  IR1307  IR1307  IR1307_053
1  IR  IR1307  IR1307  IR1307_052
2  IR  IR1307  IR1307  IR1307_051

我认为可以通过列表来实现这一点,然后比较和过滤它们:

cesList = ces4gNokTable['name'].tolist()
    cesList = list(dict.fromkeys(cesList))
    print("Список (cesList) c незаполненными данными в CES 4G Nokia:")
    print(cesList)
    oldList = old4gTable['name'].tolist()
    oldList = list(dict.fromkeys(oldList))
    print("Список (oldList) c довесами 4G Nokia:")
    print(oldList)

但我认为通过熊猫有一些更好的解决方案

python
  • 2 个回答
  • 51 Views
Martin Hope
Dato Dato
Asked: 2025-01-22 08:52:04 +0000 UTC

如何在td标签中查找文本?

  • 5

我通过beatidulsoup收到此数据

<td class="Value FormTd" id="p_body_fld_c3a5t2r34212155b1f173" z="custom.wgs_широта" zfieldshape="eSingleLine" zfieldtype="eDouble" ztags="координаты">42,831682</td>

如何获得42.831682?这是我的代码片段:

    browser = webdriver.Chrome()
    browser.get(url)
    open_search = browser.find_element(By.NAME, "p$body$ListSearch$listSearchBox")
    open_search.send_keys(bsfull +'\n')                       
    time.sleep(5)
    soup = BeautifulSoup(browser.page_source, "html.parser")
    candidate = soup.find_all(class_='fieldType-eString')
    #print(candidate[9])

    for linkCandidate in candidate[9]:
        #print(linkCandidate)
        print(f"+ Ссылка новой базовой станции: {linkCandidate['href']}\nИмя БС: {bsfull}")
        #with open("output.log", "a") as outfile:
        #    outfile.write("+ New base station link "+linkCandidate['href']+"\nИмя БС:"+bsfull+"\n")
        browser.get(linkCandidate['href'])
        soup = BeautifulSoup(browser.page_source, "html.parser")
        td = soup.find_all("td")
        #print(type(str(td[6])))
        if "УЦН" in str(td[6]):
            ucn = "УЦН"
            print(ucn)
            dataList2.append(ucn)
        else:
            ucn = "-"
            print(ucn)
            dataList2.append(ucn)
        print("Получены данные УЦН базовых станций, для которых нужно заполнить данные:")
        print(dataList2)
        with open("output.log", "a") as outfile:
            outfile.write("+ The UCN data of the base stations has been received, for which the data needs to be filled in\n")
        print(td[39])
        #latitude = soup.find(td[39])
        latitude = td[39].find(class_="Value FormTd").text
        print(latitude)

出现以下错误:

Получены данные УЦН базовых станций, для которых нужно заполнить данные:
['-']
<td class="Value FormTd" id="p_body_fld_c3a5t2r34212155b1f173" z="custom.wgs_широта" zfieldshape="eSingleLine" zfieldtype="eDouble" ztags="координаты">42,831682</td>
Traceback (most recent call last):
  File "C:\Users\david.gabunia\tpojects\cesV3\py.py", line 448, in <module>
    latitude = td[39].find(class_="Value FormTd").text
AttributeError: 'NoneType' object has no attribute 'text'
``
python
  • 1 个回答
  • 38 Views
Martin Hope
Dato Dato
Asked: 2025-01-10 13:32:44 +0000 UTC

为什么 Pyinstaller 看不到像 mysql 这样的库?

  • 6

我想让py程序成为可执行文件。我在 Windows 10 中通过 poweshell 工作。程序本身无需 pyinstaller 即可正常工作。并且它正确连接到数据库。 pyinstaller 我配置程序如下:

(envSortWind10) PS P:\projects\AutomatingDataFilling> python -m pyinstaller --paths=P:\envSortWind10\Lib\site-packages .\py.py

也没有一个错误。但是当我运行 exe 文件时,它会给出数据库连接错误并立即关闭。这是出现的错误:

Traceback (most recent call last):
File "Mysql\connector\connection_cext.py", line 335, in _open_connection
_mysql_connector. Mysqlinterfaceerror: Can't create TCP/IP socket (10022)
The above exception  was the direct cause of the following exception:
Traceback (most recent call last):
File "\\tdomain.ru\Folders\userhome\tuser\projects\AutomatingDataFilling\py.py", line 550, in <module>
ces2gErTable = checkCes2gEr(ces2gErTable)
File "\\tdomain.ru\Folders\userhome\tuser\projects\AutomatingDataFilling\py.py", line 14, in checkCes2gEr
host = "IP address", 
File "mysql\connector\pooling.py", line 322, in connect

我手动重写了错误代码,因为Pyinstaller中的程序启动窗口立即关闭,我没有时间复制代码,我只是截图了。也就是说,这里程序抱怨连接数据库和ip。尽管我检查了地址并且没有 pyinstaller 该程序可以在该地址运行。我做错了什么?感觉他无法正确安装库。尽管它们已安装。

python
  • 1 个回答
  • 62 Views
Martin Hope
Dato Dato
Asked: 2025-01-03 20:32:23 +0000 UTC

如何对网站上的数据进行排序?

  • 5

我正在学习解析 freelance.habr.com 网站。我收到了这种形式的所有数据:

Создать RDP доступ на арендованный сервер
 7 откликов  23 просмотра  37 минут назад
5 000 руб. за проект
Верстка одностраничного сайта на HTML+CSS3
 17 откликов  64 просмотра  ~ 1 час назад
договорная
...

但我怎样才能从线路中删除回复和观点呢?我怎样才能这样排序:

Задача: Создать RDP доступ на арендованный сервер
Дата: 37 минут назад
Цена: 5 000 руб. за проект
Задача: Верстка одностраничного сайта на HTML+CSS3
Дата: ~ 1 час назад
Цена: договорная

我正在尝试这样做:

            listHtml = soup.find("ul")
            #for i in listHtml.find_all("div", {"class": "task__title", "task__params"}):
            for divs in listHtml.find_all("div", class_=["task__title", "task__params","task__price"]):
            #for divs in listHtml.find_all("div", class_=["task__title"]):
                line = divs.text
                #listTitle.append(line)
                print(line)

也许最好将所有这些数据添加到字典中进行排序?

python
  • 1 个回答
  • 65 Views
Martin Hope
Dato Dato
Asked: 2024-12-22 10:32:12 +0000 UTC

html 中的 {{portfolio.description|safe}} 安全吗?

  • 5

我在 Django 上有一个网站项目,在 html 页面中包含以下代码:

                <strong>{{portfolio.begin|safe}} - {{portfolio.finish|safe}}:</strong> {{portfolio.location|safe}}
                <strong>Должность:</strong> {{portfolio.specialization|safe}}
                <strong>Дополнительная информация:</strong> {{portfolio.responsibilities|safe}}
                <strong>Достижения:</strong> {{portfolio.progress|safe}}

我决定研究一下网络服务器安全性。并了解到以这种方式从数据库填写信息是不安全的。问题是,使用这样的参数安全吗?将参数从数据库传递到html的最佳方法是什么???所有代码都在这里:https://github.com/it38dato/MyPortfolio/blob/main/dato138it/david138it/index.html

python
  • 1 个回答
  • 23 Views
Martin Hope
Dato Dato
Asked: 2024-12-17 13:35:03 +0000 UTC

如何将代码转换为函数?

  • 5

我有这段代码:

        ces2gTable = pd.DataFrame()
        ces4gTable = pd.DataFrame()
..
            else:
                #print("Это выгрузка из сайта CES")
                cols = [2, 6, 7, 8, 10, 14]
                table = pd.read_excel(locDir+"/"+file, usecols=cols)
                table = table[table["BSS"].isna()]
                #print(table)
                with open("output.log", "a") as outfile:
                    outfile.write("+ File contents received "+file+"\n")
                if "BS_address" in table:
                    ces2gTable = pd.concat([ces2gTable,table])
                elif "RMOD" in table:
                    ces4gTable = pd.concat([ces4gTable,table])
                else: 
                    with open("output.log", "a") as outfile:
                        outfile.write("- Некорректная таблица в файле "+file+"\n")
                with open("output.log", "a") as outfile:
                    outfile.write("+ The necessary 2g 4g data from the file has been loaded into the tables "+file+"\n")
                #print(table)
        print("Таблицы (ces2gTable, ces4gTable) из сайта CES для того, чтобы посмотреть какие данные на сайте не заполнены:")
        print(ces2gTable)
        print(ces4gTable)

如何将这样的代码转换为函数?我到处重复这个代码。仅列的读数发生变化。我尝试这样做:

ces2gTable = pd.DataFrame()
ces4gTable = pd.DataFrame()
def cesTable(col1, col2, col3, col4, col5, col6):
    cols = [col1, col2, col3, col4, col5, col6]
    table = pd.read_excel(locDir+"/"+file, usecols=cols)
    table = table[table["BSS"].isna()]
    #print(table)
    with open("output.log", "a") as outfile:
        outfile.write("+ File contents received "+file+"\n")
    if "BS_address" in table:
        ces2gTable = pd.concat([ces2gTable,table])
    elif "RMOD" in table:
        ces4gTable = pd.concat([ces4gTable,table])
    else: 
        with open("output.log", "a") as outfile:
            outfile.write("- Некорректная таблица в файле "+file+"\n")
    with open("output.log", "a") as outfile:
        outfile.write("+ The necessary 2g 4g data from the file has been loaded into the tables "+file+"\n")
    #print(table)
    return table
...
            else:
                #print("Это выгрузка из сайта CES")
                cesTable(2, 6, 7, 8, 10, 14)
        print("Таблицы (ces2gTable, ces4gTable) из сайта CES для того, чтобы посмотреть какие данные на сайте не заполнены:")
        print(ces2gTable)
        print(ces4gTable)

但我收到一个错误:

Traceback (most recent call last):
  File "P:\projects\FillingInDataForTheSite\py.py", line 150, in <module>
    cesTable(2, 6, 7, 8, 10, 14)
  File "P:\projects\FillingInDataForTheSite\py.py", line 17, in cesTable
    ces4gTable = pd.concat([ces4gTable,table])
UnboundLocalError: local variable 'ces4gTable' referenced before assignment
python
  • 1 个回答
  • 50 Views
Martin Hope
Dato Dato
Asked: 2024-12-16 10:34:54 +0000 UTC

如何在pandas中以所需的格式保存csv文件?

  • 3

如何将csv文件添加到pandas中所需的格式?我是这样做的:

allBs4gTable.to_csv('tempfile4g.csv', sep=',', index=False, header=False)

我收到了以下格式的文件:

MD,MD0461,MR1,MG069,46,3800,1

但我想以表格格式收到它。因为当我上传 csv 文件时,出现格式不正确的错误

python
  • 1 个回答
  • 38 Views
Martin Hope
Dato Dato
Asked: 2024-12-13 11:00:08 +0000 UTC

如何在数据框表中找到一段文本并将其替换为另一个文本?

  • 5

有一个数据框:

   BSS Reg  BS_number BS_name        BS_address     CELL
0  NaN  IR        129  IO029  Область Иркутская  IO0291
1  NaN  IR        129  IO029  Область Иркутская  IO0292
2  NaN  IR        129  IO029  Область Иркутская  IO0293
1  NaN  IR        192  IR192  Область Иркутская  IR1921
2  NaN  IR        192  IR192  Область Иркутская  IR1922

如何找到以 IO 开头的文本片段并将其替换为 IR?我正在尝试获取下表:

   BSS Reg  BS_number BS_name        BS_address     CELL
0  NaN  IR        129  IR029  Область Иркутская  IR0291
1  NaN  IR        129  IR029  Область Иркутская  IR0292
2  NaN  IR        129  IR029  Область Иркутская  IR0293
1  NaN  IR        192  IR192  Область Иркутская  IR1921
2  NaN  IR        192  IR192  Область Иркутская  IR1922

根据情况,如果有IO,最好显示这样的表。因为IO可能不在表中。以下代码是我尝试获得这样一个表:

        '''if ces2gTable["Reg"] != ces2gTable["BS_name"].str[:2]:
            ces2gTable=ces2gTable.drop("BS_name", axis=1)
            print("TRUE")
            #ces2gTable["BS_name"] = ces2gTable["BS_name"].str.replace("IO", "IR") 
        else:
            print("FALSE")'''
        addcol=ces2gTable["BS_name"]
        ces2gTable.insert(6, "RegIO", addcol)
        ces2gTable["RegIO"] = ces2gTable["RegIO"].str[:2]
        if "IO" in ces2gTable["RegIO"]:
            print("TRUE")
        else:
            print("FALSE")
        print(ces2gTable)
        print(ces4gTable)
python
  • 1 个回答
  • 21 Views
Martin Hope
Dato Dato
Asked: 2024-12-10 15:49:44 +0000 UTC

如何替换数据框中列中的数据?

  • 5

有一个数据框表:

      BSC Reg  BS_number
0  12  SA        135
1  12  SA        135
2  12  SA        135
3  39853  SA        620
4  39853  SA        620
5  39853  SA        620
6  39853  SA        621
7  39853  SA        621
8  39853  SA        621

和字典:

{'89118': 'BR067', '28': 'IR028', '120': 'IK120', '39602': 'IK135', '40877': 'IR148', '40157': 'IR169', '40256': 'IK395', '41255': 'IR484', '39493': 'KM070', '91222': 'KH173', '39428': 'KH174', '38471': 'MG069', '34697': 'NS042', '18': 'IR138', '39853': 'SA068', '12': 'SH102'}

如何用Python中的字典中的值替换BSC列中的数据?也就是说,以这种方式获取表格:

      BSC Reg  BS_number
0  SA102  SA        135
1  SA102  SA        135
2  SA102  SA        135
3  SA068  SA        620
4  SA068  SA        620
5  SA068  SA        620
6  SA068  SA        621
7  SA068  SA        621
8  SA068  SA        621
python
  • 1 个回答
  • 39 Views
Martin Hope
Dato Dato
Asked: 2024-12-03 13:06:01 +0000 UTC

如何解决 TypeError:无法将系列转换为 <class 'float'> 的问题?

  • 5

有这样一个数据框:

       newbs longitudeY1 latitudeX1   oldbs       longitudeY2        latitudeX2     BSC   LAC
0     IR021  105.98790  52.78068  IR0505   104.2578286633  52.655474988944  396402  5244
1     IR021  105.98790  52.78068  IR1017  104.59863944009  52.384744395507  396402  5244
2     IR021  105.98790  52.78068  IR1020  104.14058703968  52.010800749578  396402  5307
3     IR021  105.98790  52.78068  IR1023  104.15358510877  52.719410098781  396402  5319
4     IR021  105.98790  52.78068  IR1030  104.20639053885  52.573995078092  396402  5244
...      ...         ...        ...     ...               ...               ...     ...   ...
4192  IR066  105.68000  54.34308  IR2964  103.24349640892  52.974271985462  401257  5272
4193  IR066  105.68000  54.34308  IR2965  105.67618886914  54.995100603944  401257  5251
4194  IR066  105.68000  54.34308  IR2969  103.47831487935  52.720066254791  401257  5259
4195  IR066  105.68000  54.34308  IR2970  103.72418234894   52.09637656718  401257  5272
4196  IR066  105.68000  54.34308  IR2981  103.85440774559  52.517154218339  401257  5272

如何在此表中应用公式 sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2)) ?在我的代码中它抱怨错误:

Traceback (most recent call last):
  File "P:\projects\FillingInDataForTheSite\py.py", line 308, in <module>
    newNeighbourTable["distance"] = math.sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))        
  File "C:\Users\david\AppData\Roaming\Python\Python310\site-packages\pandas\core\series.py", line 248, in wrapper
    raise TypeError(f"cannot convert the series to {converter}")
TypeError: cannot convert the series to <class 'float'>

这是我的代码,在评论中这些是我解决问题的尝试:

        newNeighbourTable = newdatatable.merge(olddatatable, how='cross')        
        print(" - Добавляю общую таблицу.")
        x1=newNeighbourTable["latitudeX1"].astype(float)
        x2=newNeighbourTable["latitudeX2"].astype(float)
        y1=newNeighbourTable["longitudeY1"].astype(float)
        y2=newNeighbourTable["longitudeY2"].astype(float)
        #newNeighbourTable["distance"] = ""
        newNeighbourTable["distance"] = math.sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))        
        #for i, row in newNeighbourTable.iterrows():
        #    print(ewNeighbourTable.loc[i])
            #df_index = newNeighbourTable.loc[i]
            #results = math.sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))
            #newNeighbourTable["distance"] = results
        print(newNeighbourTable)
        print(newNeighbourTable.dtypes)
python
  • 1 个回答
  • 21 Views
Martin Hope
Dato Dato
Asked: 2024-11-18 12:04:05 +0000 UTC

值x1,y1如何与字典中从datax1,datay1到datax3,datay3的后续值进行比较?

  • 5

有一本字典:

{n1:[x1,y1], name1:[datax1,datay1,datalac1], name2:[datax2,datay2,datalac2], name3:[datax3,datay3,datalac3]}

如何将值x1,y1与Python字典中从datax1,datay1到datax3,datay3的后续值进行比较?如果值相等,则逐行打印名称和坐标,例如datay3。

python
  • 1 个回答
  • 16 Views
Martin Hope
Dato Dato
Asked: 2024-11-16 08:01:38 +0000 UTC

如何将两个列表中的键和值添加到现成的字典中?

  • 6

对于第一个文件,我的字典显示如下:

[n1]
[x1,y1]
{n1:[x1,y1]}

对于第二个文件,我生成了必要的列表:

[name1,name2,name3]
[datax1,datay1,datalac1,datax2,datay2,datalac2,datax3,datay3,datalac3]

如何以这种形式将数据添加到字典中:

{n1:[x1,y1], name1:[datax1,datay1,datalac1], name2:[datax2,datay2,datalac2], name3:[datax3,datay3,datalac3]}

这是整个代码:

import re
#1 перечислить список команд, которые может выполнить программа:
repeat="y"
listcmd=['Заполненние новых БС Nokia (1)', 'Заполненние довесов БС Nokia (2)', 'Заполненние довесов БС Ericsson (3)']
listname=[]
listxy=[]
listallname=[]
listall=[]
#7 Создать словарь и собрать данные: key - ИМЯ БС, value - Координаты, TAC, BSC:
datasites = dict()
#2 Создать пустой файл, который будет очищать при первом запуске и дублировать в дальнейшем информацию из консоли программы:
with open("output.txt", "w") as outfile:
    outfile.write("") 
while repeat == "y":
    print("Выполните действия, которые необходимо выполнить в CES:")
    print(listcmd)
    choicecmd = input()
    #print(choicecmd)
    if choicecmd == '1':
        print("Добавьте файлы формата kml в папке где находится программа для дальнейшей обработки данных.")
        #3 Вывести всю информацию одной БС из файла kml:
        with open("Site_IR000478_1.kml","r", encoding="utf8") as rdbfile:
            file = rdbfile.read()
        #print(file)
        #4 В двух файлах название БС, координаты, LAC и BSC отображаются в одном атрибуте Placemark. Нужно вывести всю информацию внутри атрибута Placemark:
        Placemark = re.findall(r'<Placemark>(.*?)</Placemark>', file, re.DOTALL)
        for i in Placemark:
            #print(i)
            #5 Написать код, который выводит Имя БС в каждом фрагменте Placemark, выводит его в нужном формате и добавить в пустой список:
            listbs = re.findall(r'<name>(.*?)</name>', i, re.DOTALL)
            #print(listbs)
            for bs in listbs:
                if '/' in bs:
                    bs = bs.split('/')[0]
                    i1 = 2
                    i2 = 3
                    bs = bs[:i1] + bs[i2+1:]
                    listname.append(bs)
                    #print(bs)
                    with open("output.txt", "a") as outfile:
                        outfile.write(bs + "\n")
                else:
                    #print("Имя базой станции другого формата!")
                    with open("output.txt", "a") as outfile:
                        outfile.write("Имя базой станции другого формата!\n")
            #6 Написать код, который выводит координаты в каждом фрагменте Placemark и выводит его в нужном формате и добавить в пустой список:
            listcoords = re.findall(r'<coordinates>(.*?)</coordinates>', i, re.DOTALL)
            #print(listcoords)
            for coords in listcoords:
                #print(coords)
                longitude = coords.split(',')[0]
                latitude = coords.split(',')[1]
                #print(longitude + " " + latitude + "\n")
                with open("output.txt", "a") as outfile:
                    outfile.write(longitude + " " + latitude + "\n")
                listxy.append(longitude)
                listxy.append(latitude)
        #print(listname)
        #print(listxy)
        #7
        #datasites["test1"]="test2" 
        datasites[listname[0]]=listxy
        print(datasites)
        #8 Собрать данные для второго файла, в котором есть Bsc и Lac:
        with open("IR.kml","r", encoding="utf8") as rdbfile:
            file = rdbfile.read()
        #print(file)
        Placemark = re.findall(r'<Placemark>(.*?)</Placemark>', file, re.DOTALL)
        for i in Placemark:
            #print(i)
            #if '<longitude>' and 'LAC' in i:
            if ('<longitude>' in i) and ('LAC' in i) and ('BSC: ' in i):
                listbs = re.findall(r'<name>(.*?)</name>', i, re.DOTALL)
                #print(listbs)
                for bs in listbs:
                    if (len(bs)==6) == True:
                        #print(bs)
                        listallname.append(bs)
                        with open("output.txt", "a") as outfile:
                            outfile.write(bs + "\n")                           
                    else:
                        #print("Имя базой станции другого формата!")
                        with open("output.txt", "a") as outfile:
                            outfile.write("Имя базой станции другого формата!\n")
                listcoords = re.findall(r'<longitude>(.*?)</latitude>', i, re.DOTALL)
                #print(listcoords)
                for coords in listcoords:
                    #print(coords)
                    coordinates = coords.split('</longitude>\n   <latitude>')
                    #print(coordinates)
                    longitude = coordinates[0]
                    latitude = coordinates[1]
                    #print(longitude + " " + latitude + "\n")
                    with open("output.txt", "a") as outfile:
                        outfile.write(longitude + " " + latitude + "\n")
                    listall.append(longitude)
                    listall.append(latitude)
                listbsctac = re.findall(r'<description>BSC: (.*?)</description>', i, re.DOTALL)
                #print(listbsctac)
                for data in listbsctac:
                    #print(data)
                    datas = data.split(' LAC: ')
                    #print(datas)
                    bsc = datas[0]
                    lac = datas[1]
                    #print(bsc + " " + lac + "\n")
                    with open("output.txt", "a") as outfile:
                        outfile.write(bsc + " " + lac + "\n")
                    listall.append(bsc)
                    listall.append(lac)
                #9 Добавить в словарь данные загруженные из второго файла:
                for o in listallname:
                    for p in listall:
                        datasites[o]=p
            else:
                #print("Координаты отсутсвуют!")
                #with open("output.txt", "a") as outfile:
                #   outfile.write("Координаты отсутсвуют!\n")
                break               
        #print(listallname)
        #print(listall)
        print(datasites)
    elif choicecmd == '2':
        print("Ты выбрал Заполненние довесов БС Nokia")
        with open("output.txt", "a") as outfile:
            outfile.write("Ты выбрал Заполненние довесов БС Nokia"+"\n")
    elif choicecmd == '3':
        print("Ты выбрал Заполненние довесов БС Ericsson")
        with open("output.txt", "a") as outfile:
            outfile.write("Ты выбрал Заполненние довесов БС Ericsson"+"\n")
    repeat = input("Do you want to continue? (y/n): ")
    if repeat == "n":
        break

在第9点中我尝试实现这一点。但它不输出需要的内容。将来,我需要将密钥中的数据与后续密钥进行比较。即,将 n1 坐标 x1,y1 与 name1 - datax1,datay1 进行比较。

python
  • 1 个回答
  • 29 Views
Martin Hope
Dato Dato
Asked: 2024-08-27 21:08:36 +0000 UTC

如何在电报机器人中向数据库添加两条消息?

  • 5

如何将信息添加到电报机器人的数据库中?我想向与数据库配合使用的测试机器人添加一个字典功能,例如,在本例中,它向数据库添加信息。也就是说,该功能的顺序如下 - 单击“词典”按钮,输入电报中的第一个句子,然后输入第二个句子,这些句子将记录在数据库中。为此,我添加了函数 connect_to_db、insert_data、dictionary_message、dictionary_message_step_2:

import psycopg2
import telebot
from telebot import types
from telebot.types import Message
from googletrans import Translator
from langdetect import detect
TOKEN='...'
bot = telebot.TeleBot(TOKEN)
translator = Translator()
ru_letters = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
en_letters = "abcdefghijklmnopqrstuvwxyz"
DATABASE_URL = "postgres://..."
@bot.message_handler(commands=['start'])
def start(message):
    message_user = f"Привет, <b>{message.from_user.first_name.title()}</b>! Я тестовый бот.\n" \
                   f"<b>Выбери программу, которую ты хочешь выполнить:</b>\n" \
                   f"1. Чем полезен данный бот\n" \
                   f"2. Функции бота (что может данный бот)\n" \
                   f"3. Для тех кто хочет поддержать нас и наш проект"
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton(text="Чем полезен бот ?")
    item2 = types.KeyboardButton(text="Функции бота")
    item3 = types.KeyboardButton(text="Поддержать проект")
    markup.add(item1, item2, item3)
    bot.send_message(message.from_user.id, message_user, reply_markup=markup, parse_mode='html')
    bot.register_next_step_handler(message, impact_KEYBORD_bot)
    bot.register_next_step_handler(message, fuctional_KEYBORD_bot)
    bot.register_next_step_handler(message, donat_user_bot)
def impact_KEYBORD_bot(message):
    if message.text == "Чем полезен бот ?":
        message_user = "Этот бот много чем будет полезен для вас. Ознакомьтесь с функционалом бота чтобы понять это." \
                       " В этого бота со временем мы будем внедрять новые фичи и полезные функции. Чтобы узнавать о новых фишках бота, слидите за нашим Telegramm каналом"
        key = types.InlineKeyboardMarkup()
        button = types.InlineKeyboardButton(text='Мое портфолио', url="http://dato138it.ru")
        key.add(button)
        bot.send_message(message.from_user.id, message_user, reply_markup=key, parse_mode='html')
        bot.register_next_step_handler(message, fuctional_KEYBORD_bot)
        bot.register_next_step_handler(message, donat_user_bot)
def fuctional_KEYBORD_bot(message):
    if message.text == 'Функции бота':
        message_user = "<b>Добро пожаловать главное меню бота</b>\n\n" \
                       "В скором будущем мы будем добавлять сюда новые функции!"
        key = types.ReplyKeyboardMarkup(resize_keyboard=True)
        button0 = types.KeyboardButton("Переводчик")
        button1 = types.KeyboardButton("Словарь")
        key.add(button0, button1)
        bot.send_message(message.from_user.id, message_user, reply_markup=key, parse_mode='html')
        bot.register_next_step_handler(message, impact_KEYBORD_bot)
        bot.register_next_step_handler(message, donat_user_bot)
        bot.register_next_step_handler(message, translate_message)
        #bot.register_next_step_handler(message, dictionary_message)
def donat_user_bot(message):
    if message.text == "Поддержать проект":
        message_users = f"<b>Приветствую  уважаемый {message.from_user.first_name.title()}</b>, вы перешли в отдел поддержки нашего проекта \n\n" \
                        f"Мы будем благодарны любой поддержки от вас. И также благодарим, что вы пользуетесь нашим ботом - это главная ваша поддержка для нас!\n\n" \
                        f"Мы принимаем материальную поддержку на:\n" \
                        f"<b>1. Donationalerts</b>\n" \
                        f"<b>2. PAYEER</b>\nномер счёта для пополнения: P1091200672\n" \
                        f"<b>3. QIWI</b>\n" \
                        f"<b>4. Тинькофф банк</b>"
        key = types.InlineKeyboardMarkup()
        button0 = types.InlineKeyboardButton(text="Donationalerts", url="https://ССЫЛКА_НА_ДОНАТ")
        button1 = types.InlineKeyboardButton(text="PAYEER", url="https://ССЫЛКА_НА_КОШЕЛЕК")
        button2 = types.InlineKeyboardButton(text="QIWI", url="https://ССЫЛКА_НА_КИВИ")
        button3 = types.InlineKeyboardButton(text="Тинькофф банк", url="https://ССЫЛКА_НА_БАНК")
        key.add(button0, button1, button2, button3)
        bot.send_message(message.from_user.id, message_users, reply_markup=key, parse_mode='html')
        bot.register_next_step_handler(message, impact_KEYBORD_bot)
        bot.register_next_step_handler(message, fuctional_KEYBORD_bot)
@bot.message_handler(content_types=['text'])
def translate_message(message):
    if message.text == 'Переводчик':
        bot.send_message(message.chat.id, 'Напишите сообщения а я переведу его')
        bot.register_next_step_handler(message, translate_message_step_2)
    elif message.text == 'Словарь':
        bot.send_message(message.chat.id, 'Напишите 2 предлоежения, которые нужно добавить в базу')
        bot.register_next_step_handler(message, dictionary_message_step_2)
def translate_message_step_2(message):
    cmd3 = message.text
    if cmd3[0].lower() in ru_letters:
        translation = translator.translate(cmd3, src=detect(cmd3), dest='en').text
        bot.send_message(message.chat.id, translation.encode('utf-8', 'replace').decode())
    elif cmd3[0].lower() in en_letters:
        translation = translator.translate(cmd3, src=detect(cmd3), dest='ru').text
        bot.send_message(message.chat.id, translation.encode('utf-8', 'replace').decode())
    else:
        bot.send_message(message.chat.id, 'Я тебя не понимаю')
def connect_to_db():
    conn = psycopg2.connect(DATABASE_URL, sslmode='require')
    return conn
def insert_data(words, translate):
    conn = connect_to_db()
    cursor = conn.cursor()
    query = "INSERT INTO Dictionary (words, translate) VALUES (%s, %s)"
    cursor.execute(query, (words, translate))
    conn.commit()
    cursor.close()
    conn.close()
#def dictionary_message(message):
    #if message.text == 'TEST':
    #bot.send_message(message.chat.id, 'Напишите 2 предлоежения, которые нужно добавить в базу')
        #bot.register_next_step_handler(message, dictionary_message_step_2)
def dictionary_message_step_2(message):
    bot.send_message(message.chat.id, '1-ое предложение: ')
    cmd4 = message.text
    bot.send_message(message.chat.id, '2-ое предложение: ')    
    cmd5 = message.text
    #insert_data(cmd4, cmd5)
    bot.reply_to(message, "Add Info in Dictionary.")
if __name__ == '__main__':
    bot.polling(none_stop=True, interval=0)

但由于某种原因,首先,它只对“词典”按钮做出一次反应,下次您只需重新启动它,其次,机器人仅将第一个句子保存到数据库中,由于某种原因,它看不到第二个句子。

python
  • 1 个回答
  • 31 Views
Martin Hope
Dato Dato
Asked: 2024-08-08 20:40:42 +0000 UTC

如何配置选项以将提案输入到 Telegram 机器人的变量中?

  • 5

设置翻译功能。我需要这个机器人来询问哪个句子需要翻译并翻译该句子。问题是我只设法将句子本身设置为变量,然后机器人翻译这句话。但我不知道如何设置以便电报中的用户输入提案。我的代码在这里:

import telebot
from telebot import types
from translate import Translator
TOKEN='...'
bot = telebot.TeleBot(TOKEN)
ru_letters = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
en_letters = "abcdefghijklmnopqrstuvwxyz"
@bot.message_handler(commands=["start"])
def start(message):
    message_user = f"Привет, <b>{message.from_user.first_name.title()}</b>! Я тестовый бот.\n" \
                   f"<b>Выбери программу, которую ты хочешь выполнить:</b>\n" \
                   f"1. Чем полезен данный бот\n" \
                   f"2. Функционал бота(что может данный бот)\n" \
                   f"3. Для тех кто хочет поддержать нас и наш проект"
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton(text="Чем полезен бот ?")
    item2 = types.KeyboardButton(text="Функции бота")
    item3 = types.KeyboardButton(text="Поддержать проект")
    markup.add(item1, item2, item3)
    bot.send_message(message.from_user.id, message_user, reply_markup=markup, parse_mode='html')
    bot.register_next_step_handler(message, impact_KEYBORD_bot)
    bot.register_next_step_handler(message, fuctional_KEYBORD_bot)
    bot.register_next_step_handler(message, donat_user_bot)
def impact_KEYBORD_bot(message):
    if message.text == "Чем полезен бот ?":
        message_user = "Этот бот много чем будет полезен для вас. Ознакомьтесь с функционалом бота чтобы понять это." \
                       " В этого бота со временем мы будем внедрять новые фичи и полезные функции. Чтобы узнавать о новых фишках бота, слидите за нашим Telegramm каналом"
        key = types.InlineKeyboardMarkup()
        button = types.InlineKeyboardButton(text='Мое портфолио', url="https://dato138it.ru")
        key.add(button)
        bot.send_message(message.from_user.id, message_user, reply_markup=key, parse_mode='html')
        bot.register_next_step_handler(message, fuctional_KEYBORD_bot)
        bot.register_next_step_handler(message, donat_user_bot)
def fuctional_KEYBORD_bot(message):
    if message.text == 'Функции бота':
        message_user = "<b>Добро пожаловать главное меню бота</b>\n\n" \
                       "В скором будущем мы будем добавлять сюда новые функции!"
        key = types.ReplyKeyboardMarkup(resize_keyboard=True)
        button0 = types.KeyboardButton("Переводчик")
        button1 = types.KeyboardButton("Словарь")
        key.add(button0, button1)
        bot.send_message(message.from_user.id, message_user, reply_markup=key, parse_mode='html')
        bot.register_next_step_handler(message, impact_KEYBORD_bot)
        bot.register_next_step_handler(message, donat_user_bot)
        bot.register_next_step_handler(message, translate_message)
        bot.register_next_step_handler(message, dictionary_message)
def donat_user_bot(message):
    if message.text == "Поддержать проект":
        message_users = f"<b>Приветствую  уважаемый {message.from_user.first_name.title()}</b>, вы перешли в отдел поддержки нашего проекта \n\n" \
                        f"Мы будем благодарны любой поддержки от вас. И также благодарим, что вы пользуетесь нашим ботом - это главная ваша поддержка для нас!\n\n" \
                        f"Мы принимаем материальную поддержку на:\n" \
                        f"<b>1. Donationalerts</b>\n" \
                        f"<b>2. PAYEER</b>\nномер счёта для пополнения: P1091200672\n" \
                        f"<b>3. QIWI</b>\n" \
                        f"<b>4. Тинькофф банк</b>"
        key = types.InlineKeyboardMarkup()
        button0 = types.InlineKeyboardButton(text="Donationalerts", url="https://www.donationalerts.com/r/tgbot_v")
        button1 = types.InlineKeyboardButton(text="PAYEER", url="https://payeer.com/ru/account/send/")
        button2 = types.InlineKeyboardButton(text="QIWI", url="https://my.qiwi.com/VLADYSLAV-DTJ4Y_MwOA")
        button3 = types.InlineKeyboardButton(text="Тинькофф банк", url="https://www.tinkoff.ru/cf/35TWsWpG8Fe")
        key.add(button0, button1, button2, button3)
        bot.send_message(message.from_user.id, message_users, reply_markup=key, parse_mode='html')
        bot.register_next_step_handler(message, impact_KEYBORD_bot)
        bot.register_next_step_handler(message, fuctional_KEYBORD_bot)
@bot.message_handler(content_types=['text'])
def translate_message(message):
    if message.text == 'Переводчик':
        bot.send_message(message.chat.id, 'Напишите сообщения а я переведу его')
        text = "Hello!"
        if text[0].lower() in ru_letters:
            translator = Translator(from_lang="russian", to_lang="english")
        elif text[0].lower() in en_letters:
            translator = Translator(from_lang="english", to_lang="russian")
        translated_text = translator.translate(text)
        bot.send_message(message.chat.id, translated_text)
def dictionary_message(message):
    if message.text == 'Словарь':
        bot.send_message(message.chat.id, 'list | term')
        #text = message.text
        #bot.send_message("TEST")
if __name__ == '__main__':
    bot.polling(none_stop=True, interval=0)

这是此请求的结果:

-Добро пожаловать главное меню бота
В скором будущем мы будем добавлять сюда новые функции!
-Переводчик
-Напишите сообщения а я переведу его
-Здравствуйте!

就是在第一个对话中,他询问用户选择哪些功能,他选择Translator,然后他询问一条需要翻译的消息,他自动翻译了,但是用户还没有写任何东西。我尝试像这样更改函数:

def translate_message(message):
    if message.text == 'Переводчик':
        bot.send_message(message.chat.id, 'Напишите сообщения а я переведу его')
        text = str(message.chat.id)
        if text[0].lower() in ru_letters:
            translator = Translator(from_lang="russian", to_lang="english")
            translated_text = translator.translate(text)
            bot.send_message(message.chat.id, translated_text)
        elif text[0].lower() in en_letters:
            translator = Translator(from_lang="english", to_lang="russian")
            translated_text = translator.translate(text)
            bot.send_message(message.chat.id, translated_text)

它没有给出任何回应。我做错了什么?

python
  • 2 个回答
  • 24 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5