2024-08-11



# 导入Python-Docx库
from docx import Document
from docx.shared import Inches
 
# 创建一个新的Word文档
doc = Document()
 
# 添加一级标题
doc.add_heading('Python-Docx 示例', 0)
 
# 添加段落
doc.add_paragraph('这是一个段落。')
 
# 添加图片
doc.add_picture('example.jpg', width=Inches(4.0))
 
# 添加分页
doc.add_page_break()
 
# 添加一级列表
doc.add_paragraph('这是一个有列表的段落。', style='List Bullet')
 
# 保存文档
doc.save('example.docx')

这段代码演示了如何使用Python-Docx库创建一个简单的Word文档,包括添加标题、段落、图片和分页。最后将文档保存为example.docx文件。

2024-08-11



import xml.etree.ElementTree as ET
 
# 定义函数来解析XML文件
def parse_xml(xml_file_path):
    # 解析XML文件
    tree = ET.parse(xml_file_path)
    root = tree.getroot()
    # 遍历根元素下的所有子元素
    for child in root:
        print('标签名:', child.tag)
        # 遍历子元素的所有属性
        for key, value in child.items():
            print('\t属性:', key, value)
        # 遍历子元素的文本内容
        for sub_child in child:
            print('\t\t标签名:', sub_child.tag, sub_child.text)
 
# 调用函数并传入XML文件路径
parse_xml('example.xml')

这段代码演示了如何使用Python的xml.etree.ElementTree库来读取XML文件,并遍历文件中的元素和属性。函数parse_xml接收一个XML文件路径作为参数,并打印出每个元素的标签名、属性和子元素的文本内容。这是处理XML数据的一个基本例子,适用于需要快速了解和应用XML解析技术的场景。

2024-08-11

在Pandas中,可以使用多种方法来合并DataFrame,常用的有merge, join, concat 等。以下是每种方法的简单示例:

  1. merge: 类似于SQL中的JOIN操作,可以根据一个或多个键将行合并起来。



import pandas as pd
 
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
                    'value': [1, 2, 3, 5]})
df2 = pd.DataFrame({'key': ['B', 'D', 'D', 'E'],
                    'value': [4, 5, 6, 7]})
 
result = pd.merge(df1, df2, on='key')  # 默认inner连接
  1. join: 基于index进行合并,类似于SQL中的UNION操作。



df1 = df1.set_index('key')
df2 = df2.set_index('key')
 
result = df1.join(df2, lsuffix='_left', rsuffix='_right')  # 默认按index合并
  1. concat: 沿着一条轴将多个DataFrame或Series拼接起来。



result = pd.concat([df1, df2], axis=0)  # 按行合并
# 或者按列合并
result = pd.concat([df1, df2], axis=1)

根据实际需求选择合适的合并方法。

2024-08-11

在Python中,你可以使用import语句来运行另一个Python文件中的代码。这里有一个简单的例子:

假设你有两个Python文件,一个是main.py,另一个是module.py

module.py的内容如下:




# module.py
def hello_world():
    print("Hello, World!")

main.py的内容如下:




# main.py
from module import hello_world
 
if __name__ == "__main__":
    hello_world()

运行main.py时,它会调用module.py文件中定义的hello_world函数,并打印出结果。

如果你想要直接运行另一个Python文件中的代码,而不是导入其中的函数或对象,你可以使用exec函数:




# main.py
with open('module.py', 'r') as file:
    exec(file.read())
 
# 这将运行module.py文件中的所有代码

请注意,使用exec可以执行任意代码,因此需要谨慎使用,并确保你信任执行的代码。

2024-08-11

以下是一个简化的代码示例,用于爬取携程某一页的旅游景点信息,并保存到CSV文件中。请注意,实际爬取时需要处理反爬虫策略,如设置合理的请求头、使用代理、加入延时等。




import csv
import requests
from bs4 import BeautifulSoup
 
def crawl_attractions(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    attractions = soup.find_all('div', class_='poi_title')
 
    with open('attractions.csv', 'w', newline='', encoding='utf-8') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(['Name', 'Address', 'Score'])
        for attraction in attractions:
            name = attraction.find('a', class_='name').text
            address = attraction.find('span', class_='address').text
            score = attraction.find('span', class_='score').text
            writer.writerow([name, address, score])
 
if __name__ == '__main__':
    url = 'https://you.ctrip.com/sight/tj/11-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0
2024-08-11

在 PyQt5 或 PySide6 中创建下拉列表框(QComboBox)的基本示例代码如下:

使用 PyQt5:




from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QComboBox
 
app = QApplication([])
window = QWidget()
layout = QVBoxLayout()
 
# 创建QComboBox对象
combo_box = QComboBox()
 
# 添加条目
combo_box.addItem("选项1")
combo_box.addItem("选项2")
combo_box.addItem("选项3")
 
# 当选项发生变化时,打印当前选中的文本
combo_box.currentTextChanged.connect(lambda text: print(text))
 
layout.addWidget(combo_box)
window.setLayout(layout)
window.show()
 
app.exec_()

使用 PySide6:




from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QComboBox
 
app = QApplication([])
window = QWidget()
layout = QVBoxLayout()
 
# 创建QComboBox对象
combo_box = QComboBox()
 
# 添加条目
combo_box.addItem("选项1")
combo_box.addItem("选项2")
combo_box.addItem("选项3")
 
# 当选项发生变化时,打印当前选中的文本
combo_box.currentTextChanged.connect(lambda text: print(text))
 
layout.addWidget(combo_box)
window.setLayout(layout)
window.show()
 
app.exec()

这两段代码都创建了一个包含下拉列表框的窗口,下拉列表框中有三个选项,并且当选项变化时,会在控制台打印出当前选中的文本。在实际应用中,你可以根据需要添加更多的选项或者为 QComboBox 对象添加其他属性和方法。

2024-08-11



import tkinter as tk
from tkinter import colorchooser
 
def change_color():
    global color
    color = colorchooser.askcolor(color=color, title="Choose a color")
    if color[1] is None:
        color = "red"  # 如果用户取消选择颜色,则默认使用红色
 
def draw_oval(event):
    if canvas.find_withtag("current_oval"):
        canvas.delete("current_oval")
    fill_color = colorchooser.askcolor(color=color, title="Choose a color")
    if fill_color[1] is not None:
        canvas.create_oval(10, 10, 80, 80, tags="current_oval", fill=fill_color[1])
 
root = tk.Tk()
root.title("颜色渐变动效")
 
color = "red"
change_button = tk.Button(root, text="Change Color", command=change_color)
change_button.pack(side=tk.LEFT, padx=10, pady=10)
 
canvas = tk.Canvas(root, width=100, height=100)
canvas.bind("<Button-1>", draw_oval)
canvas.pack(side=tk.LEFT)
 
root.mainloop()

这段代码使用了Tkinter库来创建一个简单的界面,并使用colorchooser模块来允许用户选择颜色。当用户点击“Change Color”按钮时,会弹出一个颜色选择对话框,并将选中的颜色作为当前绘图的颜色。在画布上点击时,会绘制一个填充为用户选择颜色的椭圆。这个例子展示了如何使用Tkinter库进行简单的交互式绘图,并动态改变颜色。

2024-08-11

在Linux环境下,我们可以使用GNU的pool库来创建和管理线程池。pool库提供了一种简单的方式来并发地执行多个任务,并且可以通过日志来监控和调试线程池的运行情况。

以下是一个简单的示例,展示了如何使用pool库创建一个线程池,并向其中添加任务,同时记录日志:




#include <stdio.h>
#include <stdlib.h>
#include <pool.h>
 
// 任务函数,线程池将会执行这个函数
void *task_function(void *arg) {
    printf("任务正在执行: %s\n", (char *)arg);
    return NULL;
}
 
int main() {
    // 创建日志文件
    FILE *log_file = fopen("threadpool.log", "a");
    if (log_file == NULL) {
        perror("打开日志文件失败");
        return 1;
    }
 
    // 创建线程池,最大线程数为4
    pool *p = pool_new(4);
    if (p == NULL) {
        fprintf(stderr, "创建线程池失败\n");
        fclose(log_file);
        return 1;
    }
 
    // 设置日志文件
    pool_setlog(p, log_file);
 
    // 向线程池中添加任务
    for (int i = 0; i < 10; ++i) {
        char *task_desc = malloc(20);
        if (task_desc == NULL) {
            fprintf(stderr, "分配内存失败\n");
            pool_destroy(p);
            fclose(log_file);
            return 1;
        }
        sprintf(task_desc, "任务%d", i);
        pool_add(p, &task_function, task_desc);
    }
 
    // 等待所有任务完成
    pool_wait(p);
 
    // 清理
    pool_destroy(p);
    fclose(log_file);
 
    printf("所有任务已完成\n");
    return 0;
}

在这个示例中,我们首先创建了一个日志文件threadpool.log,然后创建了一个最大线程数为4的线程池。我们通过pool_setlog函数将日志文件与线程池关联起来,这样线程池在执行过程中产生的日志就会被记录到这个文件中。接着,我们向线程池中添加了10个任务,并最后等待所有任务完成后清理线程池资源。

这个示例展示了如何在Linux环境下使用pool库来创建线程池,并通过日志记录其运行情况。这对于调试和监控线程池非常有帮助。

2024-08-11



from datetime import datetime, timedelta
from chinese_calendar import is_holiday, is_workday
 
# 获取今天的日期
today = datetime.now()
 
# 判断是否为工作日
if is_workday(today):
    print(f"{today.strftime('%Y-%m-%d')} 是工作日")
else:
    print(f"{today.strftime('%Y-%m-%d')} 是节假日")
 
# 判断后天是否为工作日
if is_workday(today + timedelta(days=2)):
    print(f"{today.strftime('%Y-%m-%d')} 的后天是工作日")
else:
    print(f"{today.strftime('%Y-%m-%d')} 的后天是节假日")

这段代码使用了chinese_calendar库中的is_holidayis_workday函数来判断给定日期是否为工作日或节假日。它首先获取当前日期,然后判断并打印出结果。接着,它判断后天是否为工作日,并打印出相应的结果。这个例子简单直观地展示了如何使用chinese_calendar库来进行简单的开发任务。

2024-08-11



# 导入Django模块
import django
from django.db import models
 
# 定义一个新的Django应用
class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    published_date = models.DateField()
 
    def __str__(self):
        return self.title
 
# 定义默认的数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'mydatabase',
    }
}
 
# 定义INSTALLED_APPS设置,添加我们的应用
INSTALLED_APPS = [
    'myapp',  # 假设应用名为myapp
    # ...其他应用
]
 
# 初始化Django项目
django.setup()
 
# 现在可以使用Django模型了
from myapp.models import Book
 
# 创建一条记录
new_book = Book(title='新书名', author='新作者', published_date='2023-01-01')
new_book.save()
 
# 查询所有书籍
books = Book.objects.all()
for book in books:
    print(book.title)

这段代码演示了如何在Django中创建一个新的应用,定义数据表,并设置默认数据库配置。然后,初始化Django环境,并对刚创建的数据表执行基本的增删查操作。这为Django开发者提供了一个快速入门的示例。