在几分钟内创建一个 Python Discord 机器人:简单教程

2023-10-26

Discord 机器人是在 Discord 平台上运行的自动化程序。机器人可以做各种各样的事情,从播放音乐、发送自动消息、管理角色,到踢掉违反规则的用户,以及许多其他任务。

Discord 机器人的核心功能是基于事件构建的。例如,当发生新消息事件时,机器人可以发回消息,本质上允许其响应。

在本教程中,我们将创建一个简单的 Python Discord 机器人。我们将使用 discord.py 库,它简化了在 Python 中创建机器人的过程。让我们深入 Discord 机器人的世界!

 

 

理解 Discord 的结构

在开始构建机器人之前,我们需要了解 Discord 的结构:

  • 不和谐服务器:这是一个用户社区的空间。它可以有多个通道。
  • Channel:服务器内用户可以交谈的空间。渠道可以是基于文本或语音的。
  • Message:用户发送的一段通信。这可以是文本、图像、视频等形式。
  • User:服务器的成员。用户可以具有不同的角色。
  • Role:分配给一组用户的一组权限。
  • Bot User:自动化用户,可以通过响应命令与真实用户进行交互。

 

机器人创建要求

创建 Discord 机器人是一个简单、直接的过程,可以通过开发人员门户或任何代码编辑器完成。
在添加代码之前,需要创建一个机器人帐户。
转至 Discord 开发者门户:https://discord.com/developers/applications,登录,然后单击“新应用程序”。
命名该应用程序,然后单击左侧列表中的选项机器人。
现在,添加一个机器人并复制令牌,以便在命名后进一步使用。

Discord 机器人可能需要访问 Discord 本质上属于“敏感”的数据。
要让您的机器人访问特权意图,您需要在开发者门户的机器人部分下启用“特权网关意图”。
这仅适用于属于少于 100 个服务器的未经验证的机器人。
对于经过验证的机器人,需要请求特权意图。

 

不和谐 API

Discord API 允许与其他服务进行更简单、更深入的集成,使用户能够获得更流畅的用户体验。
该 API 是一个开放 API,可用于服务机器人和 OAuth2 集成的请求。
目前正在使用各种版本的 API,您可以通过将其添加到请求路径(例如 https://discord.com/api/v{version_number})来使用首选版本。
如果未提及版本,则使用默认版本进行后续操作。

 

创建您的第一个 Python Discord 机器人

要开始用 Python 创建 Discord 机器人,我们将使用“discord.py”库,它广泛实现了 Discord 的 API。您将需要 pip 命令来安装discord.py。


pip install -U discord.py  

我们现在可以开始与 API 建立连接。


import discord
TOKEN = "Insert Your Token here"
discord_client = discord.Client()
@discord_client.event
async def on_ready():
    print(f'{discord_client.user} Welcome to  Discord!')
discord_client.run(TOKEN)
  

此代码用于建立与 Discord 的初始连接。我们首先导入需要的库discord.
代币值可以从开发者门户获取。您可以将令牌放置在程序中上面提供的占位符字符串中。

为了更安全的方法,您可以将其放置在 .env 文件中并在程序中引用该文件。
在程序中硬编码安全密钥并不是一个很好的开发人员实践。我们在这里这样做是为了演示目的。
The discord_clientobject 是 Client 类的实例,它是与 Discord 的连接。
@client.event用于注册事件,当发生某些事件时(即触发某个事件)时调用它。
The on_ready当连接建立并且机器人准备好采取进一步步骤时,将调用该函数。
最后一步使用上面指定的登录令牌运行机器人。
现在运行代码以查看已建立的连接。

Output:

欢迎新会员加入服务器

要在新用户加入服务器时打印欢迎消息,让我们添加一个新功能on_member_join到 Python 文件。


import discord
from discord.ext import commands
TOKEN ="Insert Your token here"
intents=discord.Intents.all()
client = commands.Bot(command_prefix=',', intents=intents)
@client.event
async def on_member_join(member):
    await member.create_dm()
    await member.dm_channel.send(f'Hi {member.name}, welcome to the test Discord server!')
client.run(TOKEN)
  

Output:

welcome_member 函数使用create.dm方法在加入时将欢迎消息作为直接消息发送给用户。

意图是根据运行机器人所需的功能启用的机器人权限。跑步on_member_join我们需要确保启用意图。

 

Discord 机器人命令

命令是执行特定操作或特定任务的简短指示。
机器人商店中提供的许多 Discord 机器人都有多个预先配置的命令,可以通过访问仪表板来启用或禁用这些命令。
除了该命令之外,在 Discord 中运行该命令所需的前缀也将可用。这些前缀可以有多种类型,例如感叹号等等。

Discord 具有多种类型的命令,例如聊天命令、文本命令和斜杠命令。斜杠类型命令始终使用斜杠作为前缀来执行。

文本命令需要根据命令的语法在文本框中输入,而聊天命令则直接在文本框中输入命令来使用。


import discord
import random
from discord.ext import commands
TOKEN ="Insert Your token here"
discord_bot = commands.Bot(command_prefix='!')
@discord_bot.command(name='morningquote')
async def msg(ctx):
    quotes = [
        "It's a new day",
        (
            "Be positive"
        ),
    ]
    response = random.choice(quotes)
    await ctx.send(response)
discord_bot.run(TOKEN)
  

在使用命令时,我们使用discord_bot.command将命令的前缀设置为 !并将命令名称传递为“morningquote”。
当用户键入时,机器人将执行该命令!morningquote在聊天中。

Output:

 

添加命令别名

有时,您可能希望单个命令有多个名称。例如,您可能想要一个!hello命令也响应!hi.

这可以通过命令别名来完成。以下是向命令添加别名的方法:


@bot.command(aliases=['hi'])
async def hello(ctx):
    await ctx.send('Hello!')
  

通过这段代码,两者!hello and !hi将触发命令并使机器人响应“Hello!”。您可以添加任意多个别名:


@bot.command(aliases=['hi', 'hola', 'bonjour', 'hallo'])
async def hello(ctx):
    await ctx.send('Hello!')
  

Now !hello, !hi, !hola, !bonjour, and !hallo都会触发相同的命令。

 

执行帮助命令

为机器人创建帮助命令可以为用户提供有关如何使用机器人命令的信息。

幸运的是,discord.py 提供了一个可以轻松自定义的内置帮助命令。这是一个基本示例:


bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand())  

对于这行代码,如果您输入!help在机器人所在的频道中,它将响应机器人可以处理的命令列表以及每个命令的简短描述。

您可以通过子类化来自定义帮助命令commands.DefaultHelpCommand并重写它的方法。但是,对于大多数用例,默认的帮助命令就足够了。

 

带选项的命令

带有选项的命令可以为您的discord 机器人添加更多功能。当您想让用户在多个选项之间进行选择时,这些类型的命令非常有用。

让我们创建一个基本的投票系统,用户可以在其中创建具有多个选项的投票,其他用户可以通过对机器人的消息做出反应来投票。


from collections import defaultdict
votes = defaultdict(int)

@bot.command()
async def vote(ctx, *options):
    global votes
    votes = defaultdict(int)  # Reset previous votes

    embed = discord.Embed(title="Vote", description="\n".join(f"{i}: {option}" for i, option in enumerate(options, start=1)))
    message = await ctx.send(embed=embed)

    # Add reactions
    for i in range(1, len(options) + 1):
        await message.add_reaction(f'{i}\N{COMBINING ENCLOSING KEYCAP}')

    def check(reaction, user):
        return user != bot.user and reaction.message.id == message.id and reaction.emoji.endswith('\N{COMBINING ENCLOSING KEYCAP}')

    while True:
        reaction, user = await bot.wait_for('reaction_add', check=check)
        option = int(reaction.emoji[0]) - 1
        votes[option] += 1
        await reaction.remove(user)  # Optional: remove the user's reaction

@bot.command()
async def results(ctx):
    global votes

    max_votes = max(votes.values())
    winners = [option for option, vote in votes.items() if vote == max_votes]
    await ctx.send(f"The winner(s) is/are option(s) {', '.join(map(str, winners))}!")
  

在这个例子中,vote是一个接受任意数量参数的命令,这些参数是要投票的选项。机器人发送一个列出选项的嵌入,并添加与每个选项相对应的反应。

当用户对数字做出反应时,votesdict 已更新为相应的选项。

The results然后命令确定得票最多的选项,并发送包含结果的消息。

 

具有多个参数的命令

具有多个参数的命令使您的 Discord 机器人能够一次接受多个输入。

这些命令可用于各种任务,例如计算总和、解析复杂的用户输入或处理多个选择。

让我们创建一个接受两个参数并将它们加在一起的命令:


@bot.command()
async def add(ctx, num1: int, num2: int):
    result = num1 + num2
    await ctx.send(f'The sum is {result}.')
  

在这个例子中,add是一个接受两个整数作为参数的命令。机器人计算两个数字的总和并发送包含结果的消息。

The num1: int and num2: int命令定义中的语法告诉discord.py 自动将参数转换为整数。

如果用户输入无法转换为整数的内容,discord.py 将自动发送错误消息。

对于具有多个参数的更复杂的命令,您可以使用*args or **kwargs接受任意数量的参数。下面是一个将任意数量的数字相加的命令示例:


@bot.command()
async def add(ctx, *nums: int):
    result = sum(nums)
    await ctx.send(f'The sum is {result}.')
  

在这个例子中,nums是一个包含传递给命令的所有参数的元组。这sum()函数将它们全部加在一起。

该命令可以处理任意数量的参数 - 例如,“!add 1 2 3”与“!add 1 2”一样有效。

 

处理无效命令

Discord.py 提供了一个简单的机制来处理这些错误:@command.error装饰师。该装饰器允许您指定在运行命令时发生错误时要调用的函数。

以下是如何使用此装饰器处理错误的示例:


@bot.command()
async def add(ctx, num1: int, num2: int):
    result = num1 + num2
    await ctx.send(f'The sum is {result}.')

@add.error
async def add_error(ctx, error):
    if isinstance(error, commands.BadArgument):
        await ctx.send('Please make sure to provide two numbers.')
    elif isinstance(error, commands.MissingRequiredArgument):
        await ctx.send('You forgot to provide one or both numbers.')
    else:
        await ctx.send('An unknown error occurred.')
  

在此代码片段中,add_error函数被定义为错误处理程序add命令。

如果错误是BadArgument错误,当参数无法转换为所需类型时会发生这种情况,机器人会发送一条消息,要求提供两个数字。

如果错误是MissingRequiredArgument错误,当用户忘记提供一个或两个号码时会发生这种情况,机器人会发送一条消息通知用户。

如果错误是其他原因,机器人只会通知用户发生了错误。

 

将冷却时间应用于命令

在繁忙的服务器中,某些用户可能会向您的机器人发送垃圾命令,这可能会导致速率限制或性能问题。

为了防止这种情况,您可以对机器人的命令应用冷却时间。冷却时间意味着每个用户在使用命令之间必须等待一定的时间。

Discord.py 提供了一个装饰器,@commands.cooldown(),它允许您轻松设置命令的冷却时间。该装饰器采用三个参数:

  1. 在达到冷却时间之前可以使用该命令的次数。
  2. 该命令可以使用该次数的时间段(以秒为单位)。
  3. 冷却时间的类型(每个用户、每个通道、每个服务器或全局)。

这是如何使用的示例@commands.cooldown()装饰器对命令应用冷却时间:


@bot.command()
@commands.cooldown(1, 5, commands.BucketType.user)
async def echo(ctx, *, message: str):
    await ctx.send(message)
  

在此示例中,echo每个用户命令的冷却时间为 5 秒。这意味着每个用户每 5 秒只能使用该命令一次。

如果用户尝试在冷却时使用该命令,discord.py 将自动发送错误消息。

您还可以处理CommandOnCooldown发送自定义消息时出错:


@echo.error
async def echo_error(ctx, error):
    if isinstance(error, commands.CommandOnCooldown):
        await ctx.send(f'This command is on cooldown, please try again in {error.retry_after:.2f} seconds.')
    else:
        await ctx.send('An unknown error occurred.')
  

在此代码片段中,当CommandOnCooldown引发错误时,机器人会发送一条消息,通知用户需要等待多长时间才能再次使用该命令。

 

发送文本、图像或文件

要使用 Python 发送任何数据,我们使用send() method.
要发送文本,请将内容添加到方法中,如下所示:


import discord
from discord.ext import commands
TOKEN = "Insert Your token here"
discord_bot = commands.Bot(command_prefix='!')
@discord_bot.command(name='senddata')
async def send_data(ctx):
    await ctx.send("hello there")
discord_bot.run(TOKEN)
  

Output:

要发送图像,请将图像文件添加到方法中,如下所示。当在聊天中使用命令 !sendimg 时,将发送文件 my_file.png。


import discord
from discord.ext import commands
import os
os.chdir("Your file path")
TOKEN = "Insert Your token here"
discord_bot = commands.Bot(command_prefix='!')
@discord_bot.command(name='senddata')
async def send_img(ctx):
	await ctx.send("image",file=discord.File('Your file name'))
discord_bot.run(TOKEN)
  

Output:

要发送文件或类似文件的对象,您需要首先使用以下命令打开文件open()方法,然后使用send发送数据的方法。

 

发送彩色文本

在 Discord 中,可以通过代码标记发送 8 种不同颜色的文本。它用Highlight.js和晒黑主题来达到这种效果。


import discord
from discord.ext import commands
TOKEN = "Insert Your token here"
discord_bot = commands.Bot(command_prefix='!')
@discord_bot.command(name='coloured_text')
async def test(ctx): 
    retStr = str("""```yaml\nThis is some colored Text```""") 
    await ctx.send(retStr)
discord_bot.run(TOKEN)
  

Output:

```yaml是用于指示晒青色的标记。下面是转义序列或标记及其颜色代码的列表,可用于为文本着色。

在提到的地方使用特殊字符,例如“#”、“[”等,以获得所需的颜色。请注意,彩色文本在 Web 应用程序中可见,但在移动应用程序中不可见。


Default: #839496
```
Your text
```
Quote: #586e75
```bash
#Your text
```
Solarized Green: #859900
```diff
+ Your text
```
Solarized Cyan: #2aa198
```yaml
Your text
```
or
```cs
"Your text"
```
Solarized Blue: #268bd2
```ini
[Your text]
```
Solarized Yellow: #b58900
```fix
Your text
```
Solarized Orange: #cb4b16
```css
[Your text]
```
Solarized Red: #dc322f
```diff
-Your text
```
  

Simply replace the markup with markup for the desired color. The image below shows what the colors look like.

 

从ID获取用户名

要根据用户 ID 获取用户名,我们将使用fetch_user方法。如果需要用户的完整个人资料,那么我们可以使用fetch_user_profile method.


import discord
from discord.ext import commands
TOKEN = "Insert Your token here"
discord_bot = commands.Bot(command_prefix='!')
@discord_bot.command(name='username')
async def user_name(ctx,user_id):
    user=await discord_bot.fetch_user(user_id)
    await ctx.send(user)
discord_bot.run(TOKEN)
  

Output:

 

使用 Discord 机器人添加用户角色

角色用于将权限委托给服务器内的用户以帮助管理。
角色可以在大型公共服务器中实现,例如在基于学习的服务器中,可以将“学生级别 1”、“学生级别 2”、“教师”和“主持人”等角色分配给用户。
如果有需要,它们也可以与朋友一起在私人服务器上实现。

每个角色都有不同的颜色和与其关联的不同权限。
用户继承分配给他们的每个角色的最大权限。
颜色的工作方式也类似,成员的名称继承层次结构中最高位置或最大权限的角色。
这些角色在 Discord 中具有线性层次结构,可以通过“角色”选项卡中的“管理角色”选项进行管理。
还可以建立具有独立管理权限的多个角色,以便一个用户的职责不会干扰另一用户。


import discord
from discord import Member
from discord.ext.commands import has_permissions, MissingPermissions
from discord.ext import commands
TOKEN = "Insert Your token here"
intents=discord.Intents.all()
intents.members=True
bot = commands.Bot(command_prefix="!",intents=intents)
#code to add role
@bot.command()
@commands.has_permissions(manage_roles = True)
async def addRole(ctx, user : discord.Member, role:discord.Role):
    await user.add_roles(role)
    await ctx.send(f" Added {role} to {user.ention}")
@addRole.error
async def role_error(self,ctx,error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.send("You are not authorized for this action")
bot.run(TOKEN)
  

要添加角色,首先,我们使用命令确保尝试添加角色的用户有权执行此操作。
然后我们使用add_roles方法向用户添加功能。
根据需要,您可以允许为一个用户分配多个角色,也可以使用 if-else 语句仅允许一个角色。
role_error 函数用于在未经授权的用户尝试将角色分配给其他用户的情况下打印错误消息。

Output:

用户被分配“testoo”角色。

 

向用户发送直接消息

许多 Discord 服务器被配置为在用户加入服务器时通过直接消息发送欢迎消息,或者在用户违反任何服务器规则时发送警告。
让我们看一下在使用指定命令时发送 DM 的代码。


import discord
from discord.ext import commands
TOKEN ="Insert Your token here"
intents=discord.Intents.all()
client = commands.Bot(command_prefix='!', intents=intents)
@client.command()
async def drtmsg(ctx, user:discord.Member, *, message=None):
    message = "welcome"
    embed=discord.Embed(title=message)
    await user.send(embed=embed)
client.run(TOKEN)
  

该函数将接受诸如以下的输入!drtmsg @User然后通过私人消息发送消息“欢迎”给所选用户。

Output:

 

获取特定角色的成员并向他们发送 DM

我们首先导入asyncio包进行并发编程。我们可以用ctx.guild.roles访问服务器中声明的角色。
角色列表被提取到user.roles然后我们可以遍历它以找到成员的正确角色并向他们发送所需的消息。


import asyncio 
import discord
from discord.ext import commands, tasks
Token ="Insert Your token here"
prefix="!"
intents=discord.Intents.all()
bot = commands.Bot(command_prefix=prefix,intents=intents)
@bot.command(name='dm') 
async def msg(ctx): 
    for guild in bot.guilds:  # all servers of the bot
        role = discord.utils.find(lambda r: r.name == 'Your role name', guild.roles)
        for member in guild.members:
            if role in member.roles:
                await member.send("Dm to role member")
bot.run(Token)
  

Output:

 

使用 Discord 机器人禁止/踢出成员

要从服务器中删除成员,您需要将以下代码添加到 Python 文件中。


import discord
from discord import Member
from discord.ext import commands
from discord.ext.commands import has_permissions, MissingPermissions
TOKEN = "Insert Your token here"
intents=discord.Intents.all()
discord_client = commands.Bot(command_prefix='!',intents=intents)
@discord_client.command()
@has_permissions(kick_members=True)
async def kick(ctx, member:discord.Member,*,reason=None):
    await member.kick(reason=reason)
    await ctx.send(f'The User {member} has been kicked from the server')
@kick.error
async def kick_error(ctx,error):
    if isinstance(error,commands.MissingPermissions):
        await ctx.send("You do not have required permission for the action performed")
discord_client.run(TOKEN)
  

首先,从不和谐库中导入成员和所需的权限方法,以便我们能够管理权限并解决用户问题。
We use @discord_client.command()使用机器人的客户端对象并通知它前面编写的代码是一个命令。
@has_permissions用于检查执行操作的用户是否有权这样做。
kick是执行从服务器中删除给定用户的操作的函数。

也可以给出动态原因,但我们简单地将原因表述为“测试”。
第二个功能kick_error是一个异常函数,如果用户无权踢出另一个用户,则执行该函数并打印错误消息。

被踢出的用户并不会被永久禁止使用服务器。
为了确保将用户添加到服务器的禁止成员列表中,请添加下面定义的函数。
这将确保用户只要存在于列表中就无法重新加入服务器。


import discord
from discord import Member
from discord.ext import commands
from discord.ext.commands import has_permissions, MissingPermissions
TOKEN = "Insert Your token here"
intents=discord.Intents.all()
discord_client = commands.Bot(command_prefix='!',intents=intents)
@discord_client.command()
@has_permissions(ban_members=True)
async def ban(ctx, member:discord.Member,*,reason=None):
    await member.ban(reason=reason)
    await ctx.send(f'The User {member} has been banned from the server')
@ban.error
async def ban_error(ctx,error):
    if isinstance(error,commands.MissingPermissions):
        await ctx.send("You do not have required permission for the action performed")
discord_client.run(TOKEN)
  

Output:

 

在特定时间发送消息

要在特定时间发送消息,datetime除了库之外还需要discord到目前为止一直在使用的库。


import discord
from datetime import datetime
client = discord.Client()
token = "Insert Your token here" 
channel_id=Insert Your channel id without quotes
def time_required():
    while True:
        current_time = datetime.now().strftime("%H:%M")
        if current_time == "Insert required time": 
            print("time reached")
            break
time_required()
@client.event
async def on_ready():
    print("bot:user ready == {0.user}".format(client))
    channel = client.get_channel(channel_id)
    await channel.send("timed message")
client.run(token)
  

The time_required创建函数来确定何时发送消息。在达到所需时间之前,机器人将处于睡眠模式。
一旦到了发送消息的时间,on_ready 事件将被执行,消息“定时消息”将在代码中提到的通道 id 中发送。

Output:

 

安排重复动作

有时,您可能希望机器人定期执行某些操作,例如每小时发送一条消息。

这可以通过任务来完成,任务是 discord.py 的一项功能,允许您安排以特定时间间隔调用异步函数。

这是一个例子:


from discord.ext import tasks

@tasks.loop(hours=1)
async def every_hour():
    channel = bot.get_channel(123456)  # Replace with your channel's ID
    await channel.send("It's a new hour!")

every_hour.start()
  

此任务将发送一条消息说“这是新的一小时了!”每小时到指定频道。

 

过滤词

有时,用户可能会使用不适当的语言,服务器管理员可能希望删除这些语言,以维持服务器的礼仪。
为了避免逐条分析每条消息,可以编写一个函数来自动过滤并删除包含预定义禁用单词列表中的单词的消息。
确保您的机器人具有运行此代码的管理功能。

In the on_message函数,如果用户发送的消息包含列表中的单词bannedWords,该消息将被删除并向用户发送警告,以防止他们再次使用此类词语发送。
然后我们使用process_commands确保机器人继续处理分配给它的其他命令。


import discord
from discord.ext import commands, tasks
import re
Token ="Insert Your token here"
prefix="!"
bot = commands.Bot(command_prefix=prefix)
def msg_contains_word(msg, word):
    return re.search(fr'\b({word})\b', msg) is not None
@bot.command()
async def loadcog(ctx, cog):
    bot.load_extension(f"cogs.{cog}")
@bot.command()
async def unloadcog(ctx, cog):
    bot.unload_extension(f"cogs.{cog}")
bannedWords={"ret"}
@bot.event
async def on_message(message):
    messageAuthor = message.author
    if bannedWords != None and (isinstance(message.channel, discord.channel.DMChannel) == False):
        for bannedWord in bannedWords:
            if msg_contains_word(message.content.lower(), bannedWord):
                await message.delete()
                await message.channel.send(f"{messageAuthor.mention} Message contains  a banned word.")
    await bot.process_commands(message)
bot.run(Token)
  

Output:

 

结论

Discord 是一款功能强大的社交媒体工具,具有广泛的功能。机器人的用途也非常广泛,能够做很多事情,其中​​一些已经在本教程中介绍了。
通过使用正确的命令和事件组合,我们可以让我们的机器人做更多的事情。

 

进一步阅读

https://discordpy.readthedocs.io/en/latest/index.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在几分钟内创建一个 Python Discord 机器人:简单教程 的相关文章

  • Python 和 Numpy 是 nan 和 set

    我在使用 Python 的 Numpy set 和 NaN 非数字 时遇到了不可预测的行为 gt gt gt set np float64 nan np float64 nan set nan nan gt gt gt set np flo
  • 在PyGI中获取窗口句柄

    在我的程序中 我使用 PyGObject PyGI 和 GStreamer 在 GUI 中显示视频 该视频显示在Gtk DrawingArea因此我需要获取它的窗口句柄realize 信号处理程序 在 Linux 上 我使用以下方法获取该句
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • 将 yerr/xerr 绘制为阴影区域而不是误差线

    在 matplotlib 中 如何将误差绘制为阴影区域而不是误差条 例如 而不是 忽略示例图中各点之间的平滑插值 这需要进行一些手动插值 或者只是获得更高分辨率的数据 您可以使用pyplot fill between https matpl
  • 如何删除 PyCharm 中的项目?

    如果我关闭一个项目 然后删除该项目文件夹 则在 PyCharm 重新启动后 会再次创建一个空的项目文件夹 只需按顺序执行以下步骤即可 他们假设您当前在 PyCharm 窗口中打开了该项目 单击 文件 gt 关闭项目 关闭项目 在 PyCha
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 从 pyspark.sql 中的列表创建数据框

    我完全陷入了有线的境地 现在我有一个清单li li example data map lambda x get labeled prediction w x collect print li type li 输出就像 0 0 59 0 0
  • 是否有一个包可以维护所有带有符号的货币列表?

    是否有一个 python 包提供所有 或相当完整 货币的列表与符号 如美元的 有优秀的pycountry 贪财的 https github com limist py moneyed and ccy http code google com
  • 仅当某些值相等时,如何才能将一个文本文件中的值替换为另一个文本文件中的其他值?

    我有一个名为finalscores txt我想创建一个 python 脚本 它将打开它并从两个单独的列中读取值 这是我的finalscores txt file Atom nVa predppm avgppm stdev delta QPr
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • 为什么这个 if 语句会导致语法错误

    我正在尝试设置一个 elif 语句 如果用户按下 Enter 键 代码将继续 但是我不断遇到语法错误 GTIN 0 while True try GTIN int input input your gtin 8 number if len
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • 如何使用xlwt设置文本颜色

    我无法找到有关如何设置文本颜色的文档 在 xlwt 中如何完成以下操作 style xlwt XFStyle bold font xlwt Font font bold True style font font background col
  • 使用 paramiko 运行 Sudo 命令

    我正在尝试执行sudo使用 python paramiko 在远程计算机上运行命令 我尝试了这段代码 import paramiko ssh paramiko SSHClient ssh set missing host key polic

随机推荐

  • 如何在 Ubuntu 18.04、16.04 和 LinuxMint 19/18 上安装和使用 Cordova

    阿帕奇科尔多瓦是一个开源移动开发框架 它允许您使用 HTML5 CSS3 和 JavaScript 等标准 Web 技术进行跨平台开发 避免每个移动平台的原生开发语言 Apache Cordova 命令行需要 Node js 才能在 NPM
  • 如何在 Ubuntu 22.04 上安装 Node.js

    Node正在成为开发者构建前端应用程序的首选 此外 许多开发人员正在使用它来构建 REST API 和 CRUD 该编程语言由 OpenJS 基金会开发 运行在 Chrome 的 v8 引擎上 Node js 适用于大多数现代操作系统 包括
  • 如何在 Ubuntu 18.04 和 16.04 LTS 上安装 Dovecot

    本教程将帮助您在 Ubuntu 系统上安装 Dovecot Dovecot 包为 POP IMAP 协议提供服务 通过这些协议 您可以从远程客户端访问电子邮件帐户 步骤 1 在 Ubuntu 上安装 Dovecot Dovecot 软件包可
  • 使用 Crontab 安排 Cron 作业

    Cron 是一个调度守护进程 按指定的时间间隔执行任务 这些任务称为 cron 作业 主要用于自动化系统维护或管理 例如 您可以设置 cron 作业来自动执行重复任务 例如备份数据库或数据 使用最新的安全补丁更新系统 检查磁盘空间使用情况
  • 如何列出 Debian 上已安装的软件包

    在本指南中 我们将解释如何列出和过滤 Debian 上已安装的软件包 我们还将向您展示如何检查是否安装了特定的软件包 计算已安装的软件包以及找出已安装软件包的版本 当您需要在另一台计算机上安装相同的软件包或想要重新安装系统时 了解如何列出基
  • 如何在 Ubuntu 18.04 上部署 Odoo 12

    Odoo 是世界上最受欢迎的一体化商业软件 它提供一系列业务应用程序 包括 CRM 网站 电子商务 计费 会计 制造 仓库 项目管理 库存等等 所有这些都无缝集成 Odoo可以通过多种不同的方式安装 安装 Odoo 最简单 最快的方法是使用
  • 如何从命令行管理 MySQL 数据库和用户

    MySQL 是最流行的开源关系数据库管理系统 MySQL服务器允许我们创建大量的用户和数据库 并授予适当的权限 以便用户可以访问和管理数据库 本教程介绍如何使用命令行创建和管理 MySQL 或 MariaDB 数据库和用户 在你开始之前 在
  • 如何在 CentOS 7 上安装和配置 Redis

    Redis 是一个开源的内存数据结构存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 包括监控 通知 自动故障转移 它还通过 Redis
  • 列出(显示)MySQL 数据库中的表

    管理时MySQL对于数据库服务器 您将执行的最常见的任务之一就是熟悉环境 这包括列出数据库驻留在服务器上 显示数据库表 或获取有关的信息用户帐户及其权限 本文介绍如何通过命令行列出 MySQL 或 MariaDB 数据库中的表 显示 MyS
  • 野外仍发现心脏出血:您知道自己可能很脆弱吗?

    自 Heartbleed 首次被发现以来已经六年了 OpenSSL 漏洞仍然可以在互联网上被发现和利用 事实上 19 的全球攻击由于大量未修补的面向公众的服务器 我们针对 OpenSSL Heartbleed 漏洞进行了攻击 无论是由于扫描
  • 如何在 Ubuntu 22.04 上安装 Node.js 和 npm

    Node js 是一个基于 Chrome JavaScript 构建的跨平台 开源 JavaScript 运行时环境 旨在在 Web 浏览器之外执行 JavaScript 代码 它通常用于构建快速且可扩展的服务器端和网络应用程序 npm 是
  • 如何在 Linux 中列出用户

    您是否曾经想要列出 Linux 系统中的所有用户或统计系统中的用户数量 有创建用户 删除用户 列出登录用户的命令 但是在Linux中列出所有用户的命令是什么 本教程将向您展示如何列出 Linux 系统中的用户 使用以下命令获取所有用户的列表
  • 如何在 Ubuntu 18.04 上创建 Python 虚拟环境

    Python 虚拟环境是一个独立的目录树 其中包括 Python 安装和许多附加包 Python虚拟环境的主要目的是为不同的Python项目创建一个隔离的环境 这样您就可以在每个项目的基础上安装特定版本的模块 而不必担心它会影响您的其他 P
  • 如何在 Debian 10 Linux 上安装和配置 Redis

    Redis 是一个开源内存键值数据存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 例如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 并通过 Redis Cluster 跨多个 Redi
  • 如何在 CentOS 8 上安装 Yarn

    Yarn 是一个与 npm 兼容的 JavaScript 包管理器 可帮助您自动执行安装 更新 配置和删除 npm 包的过程 它的创建是为了解决 npm 的一系列问题 例如通过并行操作加快软件包安装过程并减少与网络连接相关的错误 本教程将指
  • 使用 Python Pandas read_json 读取 JSON 文件

    Pandas read json 函数允许您读取 JSON 文件并将其转换为Pandas数据框 在本教程中 您将学习如何使用 Python 的 Pandas 加载 JSON 文件 处理各种 JSON 格式 自定义列标签 推断数据类型 解析日
  • Seaborn 热图教程(Python 数据可视化)

    在本教程中 我们将使用名为 seaborn 的 Python 库以热图形式表示数据 该库用于基于以下内容可视化数据Matplotlib 您将了解什么是热图 如何创建它 如何更改其颜色 调整其字体大小等等 所以让我们开始吧 目录 hide 1
  • 安装、配置和维护 Linux DNS 服务器

    DNS 域名系统 是计算机的命名系统 执行此操作的服务是 DNS 服务器 它将 IP 地址转换为人类可读的地址 这个进程是互联网的支柱 也是服务器中非常重要的服务 因此从那时起 我们将讨论 DNS 服务器 特别是 Linux DNS 服务器
  • Linux 中的 SSH 端口转发(隧道)

    在本教程中 我们将介绍 Linux 中的 SSH 端口转发 这是 SSH 实用程序的一项功能 Linux 管理员使用该实用程序在不同系统之间创建加密且安全的中继 您可以使用 SSH 端口转发 SSH 隧道 在两个或多个系统之间创建安全连接
  • 在几分钟内创建一个 Python Discord 机器人:简单教程

    Discord 机器人是在 Discord 平台上运行的自动化程序 机器人可以做各种各样的事情 从播放音乐 发送自动消息 管理角色 到踢掉违反规则的用户 以及许多其他任务 Discord 机器人的核心功能是基于事件构建的 例如 当发生新消息