This commit is contained in:
2023-07-26 00:46:01 +08:00
parent c7cbcd09af
commit 822fa7e626
212 changed files with 5687 additions and 5687 deletions

View File

@@ -0,0 +1,118 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/417
"""
# 第一部分Python基本操作循环判断函数文件写入
print('\n第一部分Python基本操作循环判断函数文件写入\n') # \n代表换行
for i in range(5): # 循环这里只举例for循环还有其他循环
print('我是循环产生的数:', i) # Python中没有end因此每个语句的缩进很重要
if i == 2: # 判断
print('判断:我是第三个数 2')
else:
pass # pass代表不执行任何语句用于占位可以之后再补充不然空着会报错
print() # 输出空一行
def fun0(arg): # 定义函数
print('我是函数中的内容,参数值为:', arg)
return arg*2 # 返回值
print('函数返回值:', fun0(5)) # 调用函数
print()
def main(): # “主函数”,其实也是一个普通的函数,也可以起其他名字
print('我是主函数中的内容。')
print()
if __name__ == '__main__': # 如果直接运行本文件那么执行以下内容。如果是import本文件那么不执行。
main()
# 关于类class这里不举例了。科学计算中主要还是面向过程面向对象用的比较少。
# 文件写入
# 第一种方式
with open('test1.txt', 'w') as f1: # 其中'w'为重新写入,改为'a'是补充内容
f1.write(str(100)+'\n这是第一种方式写入文件') # str()为转换成字符串
# 第二种方式
f2 = open('test2.txt', 'w') # 打开文件
f2.write(str(200)+'\n这是第二种方式写入文件') # 写入文件
f2.close() # 关闭文件
print('已写入文件!')
print()
# 第二部分Numpy库中常用的语句
print('\n\n\n第二部分Numpy库中常用的语句\n')
import numpy as np
print('零矩阵:\n', np.zeros((2, 3))) # 注意np.zeros()里需要填元组,因此显示的是两个括号
print('单位矩阵:\n', np.identity(3)) # 3行3列的单位矩阵,或者可以用np.eye()
print('把一维数组按对角矩阵排列:\n', np.diag([1, 3, 5]))
print()
print('指定步长的等差数列:\n', np.arange(1, 5, .5)) # 区间是左闭右开[1, 5)步长为0.5
print('指定个数的等差数列:\n', np.linspace(-2, 2, 5)) # 区间是左闭右闭[-2, 2], 数量是5
print()
print('随机数:\n', np.random.uniform(-2, 2)) # 随机浮点数
print('随机整数:\n', np.random.randint(-10, 10)) # 区间是左闭右开[-10, 10)
print()
# 随机数除了使用numpy库也使用random生成
import random
print('使用random库的随机数\n', random.uniform(-2,2)) # 随机浮点数
print('使用random库的随机整数\n', random.randint(-10, 10)) # 区间是左闭右闭[-10, 10]
print()
print('数组从小到大排列:\n', np.sort([1, 7, 0, 3]))
print('数组从小到大排列对应的索引:\n', np.argsort([1, 7, 0, 3])) # 注意Python中下标是从0开始的
print()
matrix0 = np.array([[1, 2+9j, 3], [2, 5, 7]]) # numpy数组
print('矩阵0\n', matrix0)
print('矩阵的维度:\n', matrix0.shape) # 查看矩阵的维度
print('矩阵的行数:\n', matrix0.shape[0]) # 查看矩阵的行数
print('矩阵的列数:\n', matrix0.shape[1]) # 查看矩阵的列数
print('矩阵转置:\n', matrix0.transpose()) # 矩阵转置
print('矩阵转置共轭:\n', matrix0.transpose().conj()) # 矩阵转置共轭
print()
matrix1 = np.array([[3, 5], [2, 7]])
eigenvalue, eigenvector = np.linalg.eig(matrix1) # 求本征值,本征向量
print('矩阵1\n', matrix1)
print('本征值:\n', eigenvalue)
print('本征向量:\n', eigenvector) # 列向量为本征向量
print('逆矩阵:\n', np.linalg.inv(matrix1)) # 求逆
print('计算行列式:\n', np.linalg.det(matrix1)) # 行列式
print()
matrix2 = np.array([[1, 2], [3, 4]])
print('矩阵2\n', matrix2)
print('矩阵1和矩阵2相乘\n', np.matmul(matrix1, matrix2)) # 矩阵乘积或者可以用np.dot()
print()
a = np.array([1, 2])
print('numpy数组a=', a)
b = np.array([3, 4])
print('numpy数组b=', b)
c = np.append(a, b, axis=0) # 增加元素
print('numpy数组增加元素\n', c)
d = np.append([a], [b], axis=0) # 增加行列数要相同或者用np.row_stack(([a], [b]))
print('numpy数组增加行\n', d)
e = np.append([a], [b], axis=1) # 增加列行数要相同或者用np.column_stack(([a], [b]))
print('numpy数组增加列\n', e)
print('重新观察a=', a)
print('重新观察b=', b)
print()
# 如果不是numpy数组原python数组可以直接用以下方法增加元素
c = [100, 200]
print('python数组c=', c)
c.append(300)
print('增加元素后c=', c)
print()

View File

@@ -0,0 +1,77 @@
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
def add_layer(inputs, in_size, out_size, activation_function=None): # 定义一层的所有神经元
Weights = tf.Variable(tf.random_normal([in_size, out_size])) # 定义Weights为tf变量并给予初值
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) # 定义biases为tf变量并给予初值
Wx_plus_b = tf.matmul(inputs, Weights) + biases # 得分
if activation_function is None: # 没有激活函数
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b) # 使用激活函数
return outputs # 返回该层每个神经元的输出值维度为out_size
# 产生训练的数据
x_data = np.linspace(-1, 1, 300, dtype=np.float32)[:, np.newaxis] # 产生数据,作为神经网络的输入数据。注:[:, np.newaxis]是用来增加一个轴,变成一个矩阵。
noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32) # 产生噪声
y_data = np.square(x_data) - 0.5 + noise # x_data加上噪声作为神经网络的输出数据。
print(x_data.shape) # 查看数据维度
print(noise.shape) # 查看数据维度
print(y_data.shape) # 查看数据维度
print() # 打印输出空一行
# 神经网络模型的建立
xs = tf.placeholder(tf.float32, [None, 1]) # 定义占位符为神经网络训练的输入数据。这里的None代表无论输入有多少数据都可以
ys = tf.placeholder(tf.float32, [None, 1]) # 定义占位符,为神经网络训练的输出数据。
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu) # 增加一个隐藏层
prediction = add_layer(l1, 10, 1, activation_function=None) # 输出层
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1])) # 损失函数
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 梯度下降
init = tf.global_variables_initializer() # 变量初始化
# 画出原始的输入输出数据点图
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.scatter(x_data, y_data)
plt.ion() # 开启交互模式
plt.show() # 显示图像
# 训练神经网络模型
sess = tf.Session() # 启动一个会话
sess.run(init) # 初始化变量
for i in range(1000): # 训练1000次
sess.run(train_step, feed_dict={xs: x_data, ys: y_data}) # 喂数据梯度下降循环1000次。
if i % 50 == 0: # 每训练50次画一下图
try: # to visualize the result and improvement
ax.lines.remove(lines[0])
except Exception:
pass
prediction_value = sess.run(prediction, feed_dict={xs: x_data}) # 神经网络预测的值
print('loss=', sess.run(loss, feed_dict={xs: x_data, ys: y_data})) # 打印输出,查看损失函数下降情况
print('prediction=', sess.run(prediction, feed_dict={xs: [x_data[0, :]]})) # # 打印输出神经网络预测的值
print() # 打印空一行
lines = ax.plot(x_data, prediction_value, 'r-', lw=5) # 画出预测的值,用线连起来
plt.pause(.1) # 暂停0.1,防止画图过快看不清。
plt.ioff() # 关闭交互模式,再画一次图。作用是不让图自动关掉。
lines = ax.plot(x_data, prediction_value, 'r-', lw=5)
plt.show()
# 保存训练好的神经网络模型tf.train.Saver()
saver = tf.train.Saver()
save_path = saver.save(sess, "my_net/save_net.ckpt") # 保存模型
print("Save to path: ", save_path)
print()
sess.close() # 关闭会话
# 调用神经网络模型,来预测新的值
with tf.Session() as sess2:
saver.restore(sess2, "my_net/save_net.ckpt") # 提取模型中的所有变量
print(y_data[0, :]) # 输出的原始值
print(sess2.run(prediction, feed_dict={xs: [x_data[0, :]]})) # 预测值

View File

@@ -0,0 +1,39 @@
import tensorflow as tf # 导入tensorflow
greeting = tf.constant('Hello Google Tensorflow!') # 定义一个常量
# 第一种方式
sess = tf.Session() # 启动一个会话
result = sess.run(greeting) # 使用会话执行greeting计算模块
print(result) # 打印显示
sess.close() # 关闭会话
# 第二种方式
with tf.Session() as sess: # 启动一个会话
print(sess.run(greeting)) # 打印显示
# 例子1
matrix1 = tf.constant([[1., 3.]]) # 定义常数矩阵1 tf.constant()
matrix2 = tf.constant([[2.], [2.]]) # 定义常数矩阵2 tf.constant()
product = tf.matmul(matrix1, matrix2) # 矩阵乘积 tf.matmul()
linear = tf.add(product, tf.constant(2.)) # 矩阵乘积后再加上一个常数 tf.add()
with tf.Session() as sess: # 启动一个会话 tf.Session()
print(sess.run(matrix1)) # 执行语句并打印显示 tf.Session().run
print(sess.run(linear)) # 执行语句并打印显示 tf.Session().run
print(linear) # 直接打印是不能看到计算结果的因为还未执行只是一个张量。这里打印显示的结果是Tensor("Add:0", shape=(1, 1), dtype=float32)
# 例子2变量tf.Variable()
state = tf.Variable(3, name='counter') # 变量tf.Variable
init = tf.global_variables_initializer() # 如果定义了变量,后面一定要有这个语句,用来初始化变量。
with tf.Session() as sess:
sess.run(init) # 变量一定要初始化变量
print(sess.run(state)) # 执行语句并打印显示
# 例子3占位符tf.placeholder()用来临时占坑需要用feed_dict来传入数值。
x1 = tf.placeholder(tf.float32)
x2 = tf.placeholder(tf.float32)
y = x1 + x2
with tf.Session() as sess:
print(sess.run(y, feed_dict={x1: 7, x2: 2}))

View File

@@ -0,0 +1,359 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/703
"""
import pygame
import random
import math
import numpy as np
# 参数
screen_width = 1500 # 屏幕宽度
screen_height = 900 # 屏幕高度
map_width = screen_width*4 # 地图的大小
map_height = screen_height*4 # 地图的大小
number_enemy = map_width*map_height/500000 # 敌人的数量
number_dots = map_width * map_height / 50 # 点点的数量
max_show_size = 100 # 球显示的最大半径(屏幕有限,球再增大时,改变的地图比例尺寸)
my_value = 1000 # 我的初始值
enemy_value_low = 500 # 敌人的初始值(最低)
enemy_value_high = 1500 # 敌人的初始值(最高)
dot_value = 30 # 点点的值(地上的豆豆/食物值)
my_speed = 10 # 我的球运动的速度
speed_up = 20 # 按下鼠标时加速
speed_enemy = 10 # 敌人球正常运动速度
speed_enemy_anomaly = 20 # 敌人突然加速时的速度(速度异常时的速度)
anomaly_pro = 0.5 # 敌人加速的概率
change_pro = 0.05 # 敌人移动路径变化的概率也就是1/change_pro左右会变化一次
eat_percent = 0.9 # 吃掉敌人的球按多少比例并入自己的体积1对应的是100%
loss = 0.001 # 按比例减小体重此外越重的减少越多10万体积损失值为loss的一倍
enemy_bigger_pro = 0.0005 # 敌人的值增加了我的球的值的enemy_bigger_rate倍的几率
enemy_bigger_rate = 0.1 # 增加我的球的体积的enemy_bigger_rate倍
class Color(object): # 定义颜色的类
@classmethod # 加了这个可以不需要把实例化,能直接调用类的方法
def random_color(cls): # cls, 即class表示可以通过类名直接调用
red = random.randint(0, 255)
green = random.randint(0, 255)
blue = random.randint(0, 255)
return red, green, blue
class Ball(object): # 定义球
def __init__(self, x, y, sx, sy, color, value): # 初始化
self.x = x # 球的地图位置参数
self.y = y
self.sx = sx # 速度参数
self.sy = sy
self.color = color # 颜色
self.value = value # 球的值,也就是球的大小(不是显示的大小)
self.is_alive = True # 球默认是存活状态
class My_Ball(Ball): # 定义我的球继承了Ball类的方法
def __init__(self, x, y, sx, sy, color, value):
# 注意如果重写了__init__() 时实例化子类就不会调用父类已经定义的__init__()
# 如果子类不重写__init__()方法实例化子类后会自动调用父类的__init__()的方法
# 如果子类重写__init__()方法又需要调用父类的方法则要使用super关键词。
super().__init__(x, y, sx, sy, color, value) # 调用父类Ball的初始化方法__init__()
self.radius = int(self.value**0.5) # 我的球的半径不考虑系数pi
if self.radius >= max_show_size: # 如果半径比规定的最大半径还大,则显示最大半径
self.show_radius = max_show_size # 我的球显示的半径
else:
self.show_radius = self.radius # 如果半径没有超过规定最大的半径,则显示原来实际大小的半径
self.position_x = int(screen_width/2) # 把我的球固定在屏幕中间position_x是屏幕显示的位置
self.position_y = int(screen_height/2) # 把我的球固定在屏幕中间position_y是屏幕显示的位置
def draw(self, window): # 把我的球画出来
self.radius = int(self.value ** 0.5) # 这里重复上面的,因为除了初始化之后,还要更新
if self.radius >= max_show_size:
self.show_radius = max_show_size
else:
self.show_radius = self.radius
self.position_x = int(screen_width / 2)
self.position_y = int(screen_height / 2)
pygame.draw.circle(window, self.color, (self.position_x , self.position_y), self.show_radius)
def eat_ball(self, other): # 吃别的球(包括小点点和敌人)
if self != other and self.is_alive and other.is_alive: # 如果other不是自身自身和对方也都是存活状态则执行下面动作
distance = ((self.position_x - other.position_x) ** 2 + (self.position_y - other.position_y) ** 2) ** 0.5 # 两个球之间的距离
if distance < self.show_radius and (self.show_radius > other.show_radius or (self.show_radius == other.show_radius and self.value > other.value)): # 如果自身半径比别人大,而且两者距离小于自身半径,那么可以吃掉。
other.is_alive = False # 吃球(敌方已死)
self.value += other.value*eat_percent # 自己的值增大(体量增大)
self.radius = int(self.value ** 0.5) # 计算出半径
if self.radius >= max_show_size: # 我的球的显示半径
self.show_radius = max_show_size
else:
self.show_radius = self.radius
def move(self): # 移动规则
self.x += self.sx # 地图位置加上速度
self.y += self.sy
# 横向出界
if self.x < 0: # 离开了地图左边
self.x = 0
if self.x > map_width: # 离开了地图右边
self.x = map_width
# 纵向出界
if self.y <= 0: # 离开了地图下边
self.y = 0
if self.y >= map_height: # 离开了地图上边
self.y = map_height
class Enemy_Ball(Ball): # 定义敌人的球继承了Ball类的方法
def __init__(self, x, y, sx, sy, color, value, host_ball): # 初始化带上host_ball也就是我的球
super().__init__(x, y, sx, sy, color, value)
self.host_ball = host_ball
self.radius = int(self.value**0.5)
if self.host_ball.radius >= max_show_size: # 如果我的球比规定的最大尺寸还大,则敌人的球显示的比例要减小
self.show_radius = max(10, int(self.radius/(self.host_ball.radius/max_show_size))) # 敌人的球也不能太小最小半径为10
self.position_x = int((self.x - self.host_ball.x) / (self.host_ball.radius / max_show_size)) + int(
screen_width / 2) # 计算出敌人的球和我的球的相对位置,并且按比例减小
self.position_y = int((self.y - self.host_ball.y) / (self.host_ball.radius / max_show_size)) + int(
screen_height / 2) # 计算出敌人的球和我的球的相对位置,并且按比例减小
else:
self.show_radius = self.radius # 正常显示
self.position_x = (self.x - self.host_ball.x) + int(screen_width / 2) # 敌人和我的球的相对位置
self.position_y = (self.y - self.host_ball.y) + int(screen_height / 2) # 敌人和我的球的相对位置
# 画出球
def draw(self, window):
self.radius = int(self.value ** 0.5)
if self.host_ball.radius >= max_show_size: # 这边把初始化的内容再写一遍,因为敌人的球初始化之后还要根据我的球而动态改变
self.show_radius = max(10, int(self.radius/(self.host_ball.radius/max_show_size)))
self.position_x = int((self.x - self.host_ball.x) / (self.host_ball.radius / max_show_size)) + int(
screen_width / 2)
self.position_y = int((self.y - self.host_ball.y) / (self.host_ball.radius / max_show_size)) + int(
screen_height / 2)
else:
self.show_radius = self.radius
self.position_x = (self.x - self.host_ball.x) + int(screen_width / 2)
self.position_y = (self.y - self.host_ball.y) + int(screen_height / 2)
pygame.draw.circle(window, self.color, (self.position_x, self.position_y), self.show_radius)
def eat_ball(self, other):
if self != other and self.is_alive and other.is_alive:
distance = ((self.position_x - other.position_x) ** 2 + (self.position_y - other.position_y) ** 2) ** 0.5
if distance < self.show_radius and (self.show_radius > other.show_radius or (self.show_radius == other.show_radius and self.value > other.value)):
other.is_alive = False # 吃球
self.value += other.value*eat_percent
self.radius = int(self.value ** 0.5)
def move(self): # 移动规则
self.x += self.sx # 地图位置加上速度
self.y += self.sy
# 横向出界
if self.x < 0: # 离开了地图左边
self.sx = -self.sx
self.x = 0
if self.x > map_width: # 离开了地图右边
self.sx = -self.sx
self.x = map_width
# 纵向出界
if self.y <= 0: # 离开了地图下边
self.sy = -self.sy
self.y = 0
if self.y >= map_height: # 离开了地图上边
self.sy = -self.sy
self.y = map_height
class Dot_Ball(Ball): # 定义地上的小点点供自己的球和敌人的球吃继承了Ball类的方法
def __init__(self, x, y, sx, sy, color, value, host_ball):
super().__init__(x, y, sx, sy, color, value)
self.host_ball = host_ball
self.radius = 8 # 初始小点点大小
if self.host_ball.radius >= max_show_size:
self.show_radius = max(3, int(self.radius/(self.host_ball.radius/max_show_size))) # 小点点显示也不能太小最小显示半径为3
self.position_x = int((self.x - self.host_ball.x) / (self.host_ball.radius / max_show_size)) + int(
screen_width / 2)
self.position_y = int((self.y - self.host_ball.y) / (self.host_ball.radius / max_show_size)) + int(
screen_height / 2)
else:
self.show_radius = self.radius
self.position_x = (self.x - self.host_ball.x) + int(screen_width / 2)
self.position_y = (self.y - self.host_ball.y) + int(screen_height / 2)
# 画出球
def draw(self, window):
if self.host_ball.radius >= max_show_size: # 这边把初始化的内容再写一遍,因为小点点初始化之后还要根据我的球而动态改变
self.show_radius = max(3, int(self.radius/(self.host_ball.radius/max_show_size)))
self.position_x = int((self.x - self.host_ball.x) / (self.host_ball.radius / max_show_size)) + int(
screen_width / 2)
self.position_y = int((self.y - self.host_ball.y) / (self.host_ball.radius / max_show_size)) + int(
screen_height / 2)
else:
self.show_radius = self.radius
self.position_x = (self.x - self.host_ball.x) + int(screen_width / 2)
self.position_y = (self.y - self.host_ball.y) + int(screen_height / 2)
pygame.draw.circle(window, self.color, (self.position_x, self.position_y) , self.show_radius)
def creat_my_ball(): # 产生我的球
x = random.randint(0, map_width) # 我的球在地图中的位置,随机生成
y = random.randint(0, map_height)
value = my_value # 我的球的初始值
color = 255, 255, 255 # 我的球的颜色
sx = 0 # 速度默认为0
sy = 0
host_ball = My_Ball(x, y, sx, sy, color, value) # 调用My_Ball类
return host_ball # 返回我的球
def auto_creat_ball(balls, host_ball): # 自动产生敌人的球
if len(balls) <= number_enemy: # 控制敌人的数量,如果个数够了,就不再生成
x = random.randint(0, map_width) # 敌人球在地图中的位置,随机生成
y = random.randint(0, map_height)
value = random.randint(enemy_value_low, enemy_value_high) # 敌人的球初始值
sx = random.randint(-speed_enemy, speed_enemy) # 敌人的球移动速度
i2 = random.randint(0, 1) # y的移动方向
if i2 == 0:
sy = int((speed_enemy**2 - sx**2) ** 0.5)
else:
sy = -int((speed_enemy ** 2 - sx ** 2) ** 0.5)
color = Color.random_color() # 敌人的颜色随机生成
enemy = Enemy_Ball(x, y, sx, sy, color, value, host_ball)
balls.append(enemy)
def auto_creat_dots(dots, host_ball): # 自动生成点点
if len(dots) <= number_dots: # 控制点点的数量
x = random.randint(0, map_width) # 随机生成点点的位置
y = random.randint(0, map_height)
value = dot_value # 点点的值
sx = 0 # 点点速度为0
sy = 0
color = Color.random_color() # 颜色
dot = Dot_Ball(x, y, sx, sy, color, value, host_ball)
dots.append(dot)
def control_my_ball(host_ball): # 控制我的球
host_ball.move()
host_ball.value = host_ball.value*(1-loss*host_ball.value/100000)
for event in pygame.event.get(): # 监控事件(鼠标移动)
# print(event)
if event.type == pygame.MOUSEBUTTONDOWN:
pos = event.pos
speed = speed_up
elif event.type == pygame.MOUSEMOTION:
pos = event.pos
if event.buttons[0] == 1:
speed = speed_up
if event.buttons[0] == 0:
speed = my_speed
elif event.type == pygame.MOUSEBUTTONUP:
pos = event.pos
speed = my_speed
else:
pos = [screen_width/2, screen_height/2]
speed = my_speed
if abs(pos[0] - screen_width/2) < 30 and abs(pos[1] - screen_height/2) < 30:
host_ball.sx = 0
host_ball.sy = 0
elif pos[0] > screen_width/2 and pos[1] >= screen_height/2:
angle = abs(math.atan((pos[1] - screen_height/2) / (pos[0] - screen_width/2)))
host_ball.sx = int(speed * math.cos(angle))
host_ball.sy = int(speed * math.sin(angle))
elif pos[0] > screen_width/2 and pos[1] < screen_height/2:
angle = abs(math.atan((pos[1] - screen_height/2) / (pos[0] - screen_width/2)))
host_ball.sx = int(speed * math.cos(angle))
host_ball.sy = -int(speed * math.sin(angle))
elif pos[0] < screen_width/2 and pos[1] >= screen_height/2:
angle = abs(math.atan((pos[1] - screen_height/2) / (pos[0] - screen_width/2)))
host_ball.sx = -int(speed * math.cos(angle))
host_ball.sy = int(speed * math.sin(angle))
elif pos[0] < screen_width/2 and pos[1] < screen_height/2:
angle = abs(math.atan((pos[1] - screen_height/2) / (pos[0] - screen_width/2)))
host_ball.sx = -int(speed * math.cos(angle))
host_ball.sy = -int(speed * math.sin(angle))
elif pos[0] == screen_width/2:
host_ball.sx = 0
if pos[1] >= 0:
host_ball.sy = speed
else:
host.ball.sy = -speed
def enemy_move(balls, host_ball): # 敌人移动
for enemy in balls:
enemy.move() # 移动
enemy.value = enemy.value*(1-loss*enemy.value/100000)
if random.randint(1, int(1/enemy_bigger_pro)) == 1:
enemy.value += host_ball.value*enemy_bigger_rate
if random.randint(1, int(1/anomaly_pro)) == 1:
speed_enemy0 = speed_enemy_anomaly # 敌人异常速度
else:
speed_enemy0 = speed_enemy # 敌人正常速度
i = random.randint(1, int(1/change_pro)) # 一定的概率改变轨迹
if i == 1:
enemy.sx = random.randint(-speed_enemy0, speed_enemy0)
i2 = random.randint(0, 1)
if i2 == 0:
enemy.sy = int((speed_enemy0 ** 2 - enemy.sx ** 2) ** 0.5)
else:
enemy.sy = -int((speed_enemy0 ** 2 - enemy.sx ** 2) ** 0.5)
def eat_each_other(host_ball, balls, dots): # 吃球
for enemy in balls:
for enemy2 in balls:
enemy.eat_ball(enemy2) # 敌人互吃
for food in dots:
enemy.eat_ball(food) # 敌人吃点点
for enemy in balls:
host_ball.eat_ball(enemy) # 我吃敌人
enemy.eat_ball(host_ball) # 敌人吃我
for food in dots:
host_ball.eat_ball(food) # 我吃点点
def paint(host_ball, balls, dots, screen):
screen.fill((0, 0, 0)) # 刷漆
if host_ball.is_alive:
host_ball.draw(screen)
for enemy in balls: # 遍历容器
if enemy.is_alive:
enemy.draw(screen)
else:
balls.remove(enemy)
for food in dots: # 遍历容器
if food.is_alive:
food.draw(screen)
else:
dots.remove(food)
def main():
pygame.init() # 初始化
screen = pygame.display.set_mode((screen_width, screen_height)) # 设置屏幕
pygame.display.set_caption("球球大作战") # 设置屏幕标题
balls = [] # 定义一容器 存放所有的敌方球
dots = [] # 定义一容器 存放所有的点点
is_running = True # 默认运行状态
host_ball = creat_my_ball() # 产生我的球
i00 = 0 # 一个参数
while is_running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
is_running = False
auto_creat_dots(dots, host_ball) # 自动生成点点
auto_creat_ball(balls, host_ball) # 自动生成敌人
paint(host_ball, balls, dots, screen) # 把所有的都画出来 调用draw方法
pygame.display.flip() # 渲染
pygame.time.delay(30) # 设置动画的时间延迟
control_my_ball(host_ball) # 移动我的球
enemy_move(balls, host_ball) # 敌人的球随机运动
eat_each_other(host_ball, balls, dots) # 吃球 调用eat_ball方法
i00 += 1
if np.mod(i00, 50) == 0:
print(host_ball.value)
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,106 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/706
"""
import numpy as np
import time
import matplotlib.pyplot as plt
import tushare as ts
def main():
start_clock = time.perf_counter()
pro = ts.pro_api('到官网上注册寻找Token填在这里!')
print('\n我的策略:见好就收,遇低抄底。\n'
' 【卖出】买入后涨了5%就卖出\n'
' 【买入】卖出后跌了5%就买入\n'
'注:第一天必须买进,最后一天前必须卖出(为了与不操作的做对比)\n')
number = 1
for i in range(number):
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date') # 所有股票列表
# print(data.columns) # 查看该数据的表头
# print(data) # 3688多行的股票数据
i = 1 # 查看第二行数据“万科A”股
ts_code = data.values[i, 0] # 股票代码
stock = data.values[i, 2] # 股票名称
industry = data.values[i, 4] # 属于哪个行业
start_date = '20110101' # 开始时间
end_date = '20191027' # 结束时间
df = pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date) # 查看该股票的日线数据
# print(df.columns) # 查看该数据的表头
# print(df) # 查看该股票的日线数据
close = np.array(list(reversed(df.values[:, 5]))) # 提取出收盘价,并按时间顺序排列,从过去到现在
pct_chg = np.array(list(reversed(df.values[:, 8]))) # 提取出涨跌幅,并按时间顺序排列,从过去到现在
# print(df.columns[5], '=', close, '\n') # 查看收盘价
# print(df.columns[8], '=', pct_chg, '\n') # 查看涨跌幅
profit, profit_no_operation, times, invest_money, buy_time_all, sell_time_all = back_test(close.shape[0], close, pct_chg)
# 调用回测函数,返回了“利润,未操作的利润, 按该策略操作了几次, 总投资金额, 按该策略买的时间, 按该策略卖的时间”的值
print('\n------股票:', stock, ts_code, industry, '[买入市值=%7.2f' % invest_money, ']------')
print('回测时间段:', start_date, '-', end_date)
print('操作后利润= %6.2f' % profit, ' 买入(卖出)次数=', times, ' ')
print('不操作利润= %6.2f' % profit_no_operation, '(第一天买入,最后一天卖出,中间未操作)')
end_clock = time.perf_counter()
print('CPU执行时间=', end_clock - start_clock, 's')
plt.figure(1)
plt.title('Stock Code: '+ts_code+' (red point: buy, green point: sell)')
plt.grid()
plt.plot(range(close.shape[0]), close, '-')
for i in buy_time_all:
plt.plot(i, close[int(i)], 'or', markersize=13) # 红色是买进的点
for i in sell_time_all:
plt.plot(i, close[int(i)], 'dg', markersize=13) # 绿色是卖出的点
plt.show()
def back_test(days, close, pct_chg, money_in=10000): # 定义该策略的回测效果(按旧数据检查该策略是否有效)
money_in_amount = int(money_in/close[0]) # 投资金额换算成股票股数
invest_money = close[0]*money_in_amount # 实际买了股票的金额
profit_no_operation = (close[close.shape[0]-1]-close[0])*money_in_amount # 不操作的利润
position = -1 # 买入还是卖出的状态,默认卖出
total_profit = 0
times = 0
current_buy_pct = -999
current_sell_pct = 999
buy_time_all = np.array([])
sell_time_all = np.array([])
for i in range(days): # 总天数
if i == 0: # 第一天,满仓买买买!为了和不操作的对比,第一天就要买入。
buy_time = i # 买入时间
buy_time_all = np.append(buy_time_all, [buy_time], axis=0) # 买入时间存档
position = 1 # 标记为买入状态
print('------------------第', buy_time, '天买进-------------')
else:
profit = 0
if position == 1: # 买入状态
current_buy_pct = (close[i]-close[buy_time])/close[buy_time]*100 # 买入后的涨跌情况
# print('当前买进后的涨跌情况:第', i, '天=', current_buy_pct)
if position == 0: # 卖出状态
current_sell_pct = (close[i]-close[sell_time])/close[sell_time]*100 # 卖出后的涨跌情况
if current_sell_pct < -5 and position == 0: # 卖出状态且卖出后跌了有3%,这时候买入
buy_time = i # 买入时间
buy_time_all = np.append(buy_time_all, [buy_time], axis=0) # 买入时间存档
print('------------------第', buy_time, '天买进-------------')
position = 1 # 标记为买入状态
continue
if current_buy_pct > 5 and position == 1: # 买入状态且买入后涨了有3%,这时候卖出
sell_time = i # 卖出时间
sell_time_all = np.append(sell_time_all, [sell_time], axis=0) # 卖出时间存档
print('----------第', sell_time, '天卖出,持有天数:', sell_time-buy_time, '--------------\n')
position = 0 # 标记为卖出状态
profit = close[sell_time]-close[buy_time] # 赚取利润
times = times + 1 # 买入卖出次数加1
total_profit = total_profit + profit*money_in_amount # 计算总利润
if position == 1: # 最后一天如果是买入状态,则卖出
profit = close[i]-close[buy_time] # 赚取利润
total_profit = total_profit + profit # 计算总利润
times = times + 1 # 买入卖出次数加1
print('--------------第', i, '天(最后一天)卖出,持有天数:', sell_time-buy_time, '--------------\n')
sell_time_all = np.append(sell_time_all, [i], axis=0) # 卖出时间存档
return total_profit, profit_no_operation, times, invest_money, buy_time_all, sell_time_all
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,11 @@
import imageio
import numpy as np
import os
# os.chdir('E:/data') # 设置文件读取和保存位置
images = []
for i in range(1000):
image = str(i)+'.jpg'
im = imageio.imread(image)
images.append(im)
imageio.mimsave("a.gif", images, 'GIF', duration=0.1) # durantion是延迟时间

View File

@@ -0,0 +1,35 @@
from multiprocessing import Process
import os
import time
import numpy as np
import guan
def main(parameter_array, task_index):
print ('Process id = %s' % (os.getpid()))
result_array = []
for parameter in parameter_array:
result = parameter*2
result_array.append(result)
time.sleep(np.random.uniform(1,10))
guan.write_one_dimensional_data(parameter_array, result_array, filename='task_index='+str(task_index))
if __name__ == '__main__':
cpus = 4
parameter_array_all = np.arange(0, 17, 1)
start_time = time.perf_counter()
process_array = []
for task_index in range(cpus):
parameter_array = guan.preprocess_for_parallel_calculations(parameter_array_all, cpus, task_index)
process_array.append(Process(target=main, args=(parameter_array, task_index)))
for process in process_array: # 运行子进程
process.start()
for process in process_array: # 等待子进程完成
process.join()
end_time = time.perf_counter()
print('运行时间=', (end_time-start_time), '\n')
f = open('result.txt', 'w')
for task_index in range(cpus):
with open('task_index='+str(task_index)+'.txt', 'r') as f0:
text = f0.read()
f.write(text)
f.close()

View File

@@ -0,0 +1,42 @@
from multiprocessing import Process
import os
import time
def run_proc(name): # 要执行的代码
start_time = time.perf_counter()
time.sleep(2)
end_time = time.perf_counter()
print ('Process id running on %s = %s' % (name, os.getpid()), '; running time = %s' % (end_time-start_time))
if __name__ == '__main__':
# 串行
print('串行程序')
print('Process id = %s.' % os.getpid())
start_time = time.perf_counter()
run_proc('job1')
run_proc('job2')
run_proc('job3')
run_proc('job4')
end_time = time.perf_counter()
print('CPU执行时间(s)=', (end_time-start_time), '\n')
# 并行
print('并行程序')
print('Process id = %s.' % os.getpid())
start_time = time.perf_counter()
p1 = Process(target=run_proc, args=('job1',))
p2 = Process(target=run_proc, args=('job2',))
p3 = Process(target=run_proc, args=('job3',))
p4 = Process(target=run_proc, args=('job4',))
p1.start()
p2.start()
p3.start()
p4.start()
p1.join() # join()方法可以等待子进程结束后再继续往下运行
p2.join()
p3.join()
p4.join()
end_time = time.perf_counter()
print('运行时间(s)=', (end_time-start_time))

View File

@@ -0,0 +1,16 @@
from multiprocessing import Process, Value
def run_proc(name, a, num): # 要执行的代码
num.value = a
if __name__ == '__main__':
num1 = Value('d', 0.0) # 共享内存
num2 = Value('d', 0.0) # 共享内存
p1 = Process(target=run_proc, args=('job1', 100, num1))
p2 = Process(target=run_proc, args=('job2', 200, num2))
p1.start()
p2.start()
p1.join()
p2.join()
print(num1.value)
print(num2.value)

View File

@@ -0,0 +1,30 @@
import numpy as np
from math import *
# import os
# os.chdir('D:/data') # 设置路径
def main():
k1 = np.arange(-pi, pi, 0.05)
k2 = np.arange(-pi, pi, 0.05)
value = np.ones((k2.shape[0], k1.shape[0]))
plot_matrix(k1, k2, value)
def plot_matrix(k1, k2, matrix):
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
fig = plt.figure()
ax = fig.gca(projection='3d')
k1, k2 = np.meshgrid(k1, k2)
ax.plot_surface(k1, k2, matrix, cmap=cm.coolwarm, linewidth=0, antialiased=False)
plt.xlabel('k1')
plt.ylabel('k2')
ax.set_zlabel('Z')
plt.show()
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,31 @@
import numpy as np
from math import *
# import os
# os.chdir('D:/data') # 设置路径
def main():
k1 = np.arange(-pi, pi, 0.05)
k2 = np.arange(-pi, pi, 0.05)
value = np.ones((k2.shape[0], k1.shape[0]))
write_matrix(k1, k2, value)
def write_matrix(k1, k2, matrix):
with open('a.txt', 'w') as f:
# np.set_printoptions(suppress=True) # 取消输出科学记数法
f.write('0 ')
for k10 in k1:
f.write(str(k10)+' ')
f.write('\n')
i0 = 0
for k20 in k2:
f.write(str(k20))
for j0 in range(k1.shape[0]):
f.write(' '+str(matrix[i0, j0])+' ')
f.write('\n')
i0 += 1
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,35 @@
import numpy as np
from math import *
# import os
# os.chdir('D:/data') # 设置路径
def hamiltonian(k):
pass
def main():
k = np.arange(-pi, pi, 0.05)
plot_bands_one_dimension(k, hamiltonian)
def plot_bands_one_dimension(k, hamiltonian):
import matplotlib.pyplot as plt
dim = hamiltonian(0).shape[0]
dim_k = k.shape[0]
eigenvalue_k = np.zeros((dim_k, dim))
i0 = 0
for k0 in k:
matrix0 = hamiltonian(k0)
eigenvalue, eigenvector = np.linalg.eig(matrix0)
eigenvalue_k[i0, :] = np.sort(np.real(eigenvalue[:]))
i0 += 1
for dim0 in range(dim):
plt.plot(k, eigenvalue_k[:, dim0], '-k')
plt.xlabel('k')
plt.ylabel('E')
plt.show()
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,47 @@
import numpy as np
from math import *
# import os
# os.chdir('D:/data') # 设置路径
def hamiltonian(k1, k2):
pass
def main():
k1 = np.arange(-pi, pi, 0.05)
k2 = np.arange(-pi, pi, 0.05)
plot_bands_two_dimension(k1, k2, hamiltonian)
def plot_bands_two_dimension(k1, k2, hamiltonian):
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
dim = hamiltonian(0, 0).shape[0]
dim1 = k1.shape[0]
dim2 = k2.shape[0]
eigenvalue_k = np.zeros((dim2, dim1, dim))
i0 = 0
for k20 in k2:
j0 = 0
for k10 in k1:
matrix0 = hamiltonian(k10, k20)
eigenvalue, eigenvector = np.linalg.eig(matrix0)
eigenvalue_k[i0, j0, :] = np.sort(np.real(eigenvalue[:]))
j0 += 1
i0 += 1
fig = plt.figure()
ax = fig.gca(projection='3d')
k1, k2 = np.meshgrid(k1, k2)
for dim0 in range(dim):
ax.plot_surface(k1, k2, eigenvalue_k[:, :, dim0], cmap=cm.coolwarm, linewidth=0, antialiased=False)
plt.xlabel('k1')
plt.ylabel('k2')
ax.set_zlabel('E')
plt.show()
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,31 @@
import numpy as np
from math import *
# import os
# os.chdir('D:/data') # 设置路径
def hamiltonian(k):
pass
def main():
k = np.arange(-pi, pi, 0.05)
write_bands_one_dimension(k, hamiltonian)
def write_bands_one_dimension(k, hamiltonian):
dim = hamiltonian(0).shape[0]
f = open('a.txt','w')
for k0 in k:
f.write(str(k0)+' ')
matrix0 = hamiltonian(k0)
eigenvalue, eigenvector = np.linalg.eig(matrix0)
eigenvalue = np.sort(np.real(eigenvalue))
for dim0 in range(dim):
f.write(str(eigenvalue[dim0])+' ')
f.write('\n')
f.close()
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,42 @@
import numpy as np
from math import *
# import os
# os.chdir('D:/data') # 设置路径
def hamiltonian(k1, k2):
pass
def main():
k1 = np.arange(-pi, pi, 0.05)
k2 = np.arange(-pi, pi, 0.05)
write_bands_two_dimension(k1, k2, hamiltonian)
def write_bands_two_dimension(k1, k2, hamiltonian):
f1 = open('a1.txt', 'w')
f2 = open('a2.txt', 'w')
f1.write('0 ')
f2.write('0 ')
for k10 in k1:
f1.write(str(k10)+' ')
f2.write(str(k10)+' ')
f1.write('\n')
f2.write('\n')
for k20 in k2:
f1.write(str(k20)+' ')
f2.write(str(k20)+' ')
for k10 in k1:
matrix0 = hamiltonian(k10, k20)
eigenvalue, eigenvector = np.linalg.eig(matrix0)
eigenvalue = np.sort(np.real(eigenvalue))
f1.write(str(eigenvalue[0])+' ')
f2.write(str(eigenvalue[1])+' ')
f1.write('\n')
f2.write('\n')
f1.close()
f2.close()
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,7 @@
import numpy as np # 导入numpy库用来存储和处理大型矩阵比python自带的嵌套列表更高效。numpy库还包含了许多数学函数库。python+numpy等同于matlab。
def main(): # 主函数的内容放在这里。
pass
if __name__ == '__main__': # 如果是当前文件直接运行执行main()函数中的内容如果是import当前文件则不执行。同时将main()语句放在最后运行,可以避免书写的函数出现未定义的情况。
main()

View File

@@ -0,0 +1,4 @@
1 1.2 2.4
2 5.5 3.2
3 6.7 7.1
4 3.6 4.9

View File

@@ -0,0 +1,4 @@
0 1 2 3 4
1 1.3 2.7 6.7 8.3
2 4.3 2.9 5.4 7.4
3 9.1 8.2 2.6 3.1

View File

@@ -0,0 +1,47 @@
import numpy as np
import matplotlib.pyplot as plt
# import os
# os.chdir('D:/data') # 设置路径
def main():
x, y = read_one_dimension('1D_data.txt')
for dim0 in range(y.shape[1]):
plt.plot(x, y[:, dim0], '-k')
plt.show()
def read_one_dimension(file_name):
f = open(file_name, 'r')
text = f.read()
f.close()
row_list = np.array(text.split('\n')) # 根据“回车”分割成每一行
# print('文本格式:')
# print(text)
# print('row_list:')
# print(row_list)
# print('column:')
dim_column = np.array(row_list[0].split()).shape[0] # 列数
x = np.array([])
y = np.array([])
for row in row_list:
column = np.array(row.split()) # 每一行根据“空格”继续分割
# print(column)
if column.shape[0] != 0: # 解决最后一行空白的问题
x = np.append(x, [float(column[0])], axis=0) # 第一列为x数据
y_row = np.zeros(dim_column-1)
for dim0 in range(dim_column-1):
y_row[dim0] = float(column[dim0+1])
if np.array(y).shape[0] == 0:
y = [y_row]
else:
y = np.append(y, [y_row], axis=0)
# print('x:')
# print(x)
# print('y:')
# print(y)
return x, y
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,69 @@
import numpy as np
# import os
# os.chdir('D:/data') # 设置路径
def main():
x1, x2, matrix = read_two_dimension('2D_data.txt')
plot_matrix(x1, x2, matrix)
def read_two_dimension(file_name):
f = open(file_name, 'r')
text = f.read()
f.close()
row_list = np.array(text.split('\n')) # 根据“回车”分割成每一行
# print('文本格式:')
# print(text)
# print('row_list:')
# print(row_list)
# print('column:')
dim_column = np.array(row_list[0].split()).shape[0] # 列数
x1 = np.array([])
x2 = np.array([])
matrix = np.array([])
for i0 in range(row_list.shape[0]):
column = np.array(row_list[i0].split()) # 每一行根据“空格”继续分割
# print(column)
if i0 == 0:
x1_str = column[1::] # x1坐标去除第一个在角落的值
x1 = np.zeros(x1_str.shape[0])
for i00 in range(x1_str.shape[0]):
x1[i00] = float(x1_str[i00]) # 字符串转浮点
elif column.shape[0] != 0: # 解决最后一行空白的问题
x2 = np.append(x2, [float(column[0])], axis=0) # 第一列为x数据
matrix_row = np.zeros(dim_column-1)
for dim0 in range(dim_column-1):
matrix_row[dim0] = float(column[dim0+1])
if np.array(matrix).shape[0] == 0:
matrix = [matrix_row]
else:
matrix = np.append(matrix, [matrix_row], axis=0)
# print('x1:')
# print(x1)
# print('x2:')
# print(x2)
# print('matrix:')
# print(matrix)
return x1, x2, matrix
def plot_matrix(x1, x2, matrix):
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
fig = plt.figure()
ax = fig.gca(projection='3d')
x1, x2 = np.meshgrid(x1, x2)
ax.plot_surface(x1, x2, matrix, cmap=cm.coolwarm, linewidth=0, antialiased=False)
plt.xlabel('x1')
plt.ylabel('x2')
ax.set_zlabel('z')
plt.show()
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,18 @@
import numpy as np
from math import *
# import os
# os.chdir('D:/data') # 设置路径
f = open('a.txt', 'w')
f.write('0 ')
for k1 in np.arange(-pi, pi, 0.05):
f.write(str(k1)+' ')
f.write('\n')
for k2 in np.arange(-pi, pi, 0.05):
f.write(str(k2)+' ')
for k1 in np.arange(-pi, pi, 0.05):
data = 1000 # 运算数据
f.write(str(data)+' ')
f.write('\n')
f.close()

View File

@@ -0,0 +1,47 @@
from bs4 import BeautifulSoup
from urllib.request import urlopen
# 最简单的情况
html = urlopen("https://mofanpy.com/static/scraping/basic-structure.html").read().decode('utf-8')
print('\n显示网页的代码信息1\n\n ----------------开始----------------\n', html, '\n\n----------------结束----------------') # 显示网页的代码信息
soup = BeautifulSoup(html, features='lxml') # 把网页放进BeautifulSoup
print('\n获取标签_标题h1_中的内容soup.h1\n', soup.h1)
print('\n获取标签_段落p_中的内容soup.p\n', soup.p)
print('\n获取标签_链接a_中的内容soup.a\n', soup.a)
all_href = soup.find_all('a')
print('\n获取所有"a标签"的内容soup.find_all(a)\n', all_href)
print('\n获取某个字典的值_1')
for a in all_href:
print(a)
print(a['href'])
all_href = [a['href'] for a in all_href]
print('\n获取某个字典的值_2\n', all_href, '\n')
# 加入CSS内容
html = urlopen("https://mofanpy.com/static/scraping/list.html").read().decode('utf-8')
print('\n显示网页的代码信息2\n\n ----------------开始----------------\n', html, '\n\n----------------结束----------------') # 显示网页的代码信息
soup = BeautifulSoup(html, features='lxml') # 把网页放进BeautifulSoup
print('\n利用class筛选出所需要的信息')
month = soup.find_all('li', {"class": "month"})
print(month, '\n')
print('只显示文本:')
for m in month:
print(m.get_text())
print('\n 多次筛选:')
january = soup.find('ul', {"class": 'jan'})
print(january, '\n')
d_january = january.find_all('li') # use january as a parent
print(d_january, '\n')
for d in d_january:
print(d.get_text())

View File

@@ -0,0 +1,78 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/6869
"""
import PyPDF2
import os
import re
from bs4 import BeautifulSoup
from urllib.request import urlopen
import requests
def main():
os.chdir('D:/') # PDF文件存放的位置
filename = input('输入PDF文件名')
pdfFile = open(filename+'.pdf','rb') # 打开PDF文件
links = all_links_in_pdf(pdfFile) # 获取PDF文件中的链接
pdfFile.close() # 关闭PDF文件
os.chdir('D:/Reference') # 设置参考文献保存的位置
download(links) # 下载文献
def all_links_in_pdf(pdfFile):
pdfReader = PyPDF2.PdfFileReader(pdfFile)
pages = pdfReader.getNumPages()
i0 = 0
links = []
print()
for page in range(pages):
pageSliced = pdfReader.getPage(page)
pageObject = pageSliced.getObject()
if '/Annots' in pageObject.keys():
ann = pageObject['/Annots']
old = ''
for a in ann:
u = a.getObject()
if '/A' in u.keys():
if re.search(re.compile('^https://doi.org'), u['/A']['/URI']): # 排除其他形式的链接
if u['/A']['/URI'] != old: # 排除重复链接
print(i0 , u['/A']['/URI'])
links.append(u['/A']['/URI']) # 链接存在link数组中
i0 += 1
old = u['/A']['/URI']
return links
def download(links):
for i0 in [0, 1, 3]: # 指定参考文献下载如需全部下载用for i0 in range(links.shape[0]):
address = links[i0]
r = requests.post('https://sci-hub.st/', data={'request': address})
print('\n响应结果是:', r)
print('访问的地址是:', r.url)
soup = BeautifulSoup(r.text, features='lxml')
pdf_URL = soup.embed['src']
# pdf_URL = soup.iframe['src'] # This is a code line of history version which fails to get pdf URL.
if re.search(re.compile('^https:'), pdf_URL):
pass
else:
pdf_URL = 'https:'+pdf_URL
print('PDF的地址是', pdf_URL)
name = re.search(re.compile('fdp.*?/'),pdf_URL[::-1]).group()[::-1][1::]
print('PDF文件名是', name)
print('保存的位置在:', os.getcwd())
print('\n正在下载第',i0,'')
r = requests.get(pdf_URL, stream=True)
with open(name, 'wb') as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)
print('',i0,'篇下载完成!')
print('\n全部下载完成!')
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,30 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/6869
"""
import PyPDF2
import os
import re
os.chdir('D:/') # PDF文件存放的位置
filename = input('输入PDF文件名')
pdfFile = open(filename+'.pdf','rb')
pdfReader = PyPDF2.PdfFileReader(pdfFile)
pages = pdfReader.getNumPages()
i0 = 0
for page in range(pages):
pageSliced = pdfReader.getPage(page)
pageObject = pageSliced.getObject()
if '/Annots' in pageObject.keys():
ann = pageObject['/Annots']
old = ''
for a in ann:
u = a.getObject()
if '/A' in u.keys():
if re.search(re.compile('^https://doi.org'), u['/A']['/URI']): # 排除其他形式的链接
if u['/A']['/URI'] != old: # 排除重复链接
print(i0 , u['/A']['/URI'])
i0 += 1
old = u['/A']['/URI']
pdfFile.close()

View File

@@ -0,0 +1,47 @@
"""
This code is supported by the website: https://www.guanjihuan.com
"""
from bs4 import BeautifulSoup
import re
import requests
import urllib.request
import os
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
html = urllib.request.urlopen("https://www.guanjihuan.com/archives/4418").read().decode('utf-8')
soup = BeautifulSoup(html, features='lxml')
all_a_tag = soup.find_all('a', href=True)
for a_tag in all_a_tag:
href = a_tag['href']
if re.search('https://www.ldoceonline.com/dictionary/', href):
print(href[39:])
exist_1 = os.path.exists('words_mp3_breProns/'+href[39:]+'.mp3')
exist_2 = os.path.exists('words_mp3_ameProns/'+href[39:]+'.mp3')
if exist_1 and exist_2:
continue
header = {'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'} # 头部信息
request = urllib.request.Request(href,headers=header)
reponse = urllib.request.urlopen(request).read()
soup2 = BeautifulSoup(reponse, features='lxml')
span = soup2.find_all('span', {"class":"speaker brefile fas fa-volume-up hideOnAmp"})
for span0 in span:
href2 = span0['data-src-mp3']
if re.search('https://www.ldoceonline.com/media/english/breProns/', href2):
print(href2)
r = requests.get(href2, headers=header, stream=True)
with open('words_mp3_breProns/'+href[39:]+'.mp3', 'wb') as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)
break
span = soup2.find_all('span', {"class":"speaker amefile fas fa-volume-up hideOnAmp"})
for span0 in span:
href2 = span0['data-src-mp3']
if re.search('https://www.ldoceonline.com/media/english/ameProns/', href2):
print(href2)
r = requests.get(href2, headers=header, stream=True)
with open('words_mp3_ameProns/'+href[39:]+'.mp3', 'wb') as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)
break
print()

View File

@@ -0,0 +1,9 @@
# Words in webpage: https://www.guanjihuan.com/archives/4418
# installation:
# (1) pip install pygame
# (2) pip install --upgrade guan
import guan
guan.play_academic_words()
# guan.play_academic_words(reverse=1)
# guan.play_academic_words(reverse=0, random_on=0, bre_or_ame='ame', show_translation=1, show_link=1, translation_time=2, rest_time=1)

View File

@@ -0,0 +1,32 @@
import numpy as np
# import os
# os.chdir('D:/data') # 设置文件保存的位置
def main():
x = [4, 3, 5, 7]
y = [6, 1, 3, 2]
value = [3, 1, 10, 2]
Plot_2D_Scatter(x, y, value, title='Plot 2D Scatter')
def Plot_2D_Scatter(x, y, value, xlabel='x', ylabel='y', title='title', filename='a'):
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
plt.subplots_adjust(bottom=0.2, right=0.8, left=0.2)
for i in range(np.array(x).shape[0]):
ax.scatter(x[i], y[i], marker='o', s=100*value[i], c=[(1,0,0)])
ax.set_title(title, fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel(xlabel, fontsize=20, fontfamily='Times New Roman')
ax.set_ylabel(ylabel, fontsize=20, fontfamily='Times New Roman')
ax.tick_params(labelsize=15) # 设置刻度值字体大小
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels] # 设置刻度值字体
# plt.savefig(filename+'.jpg', dpi=300)
plt.show()
plt.close('all')
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,38 @@
import numpy as np
# import os
# os.chdir('D:/data') # 设置文件保存的位置
def main():
x = [1, 3, 5, 7]
y = [2, 4, 6, 8]
z = [2, 8, 6, 1]
value = [3, 1, 10, 2]
Plot_3D_Scatter(x, y, z, value, title='Plot 3D Scatter')
def Plot_3D_Scatter(x, y, z, value, xlabel='x', ylabel='y', zlabel='z', title='title', filename='a'):
import matplotlib.pyplot as plt
from matplotlib.ticker import LinearLocator
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plt.subplots_adjust(bottom=0.1, right=0.8)
for i in range(np.array(x).shape[0]):
ax.scatter(x[i], y[i], z[i], marker='o', s=int(100*value[i]), c=[(1,0,0)])
ax.set_title(title, fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel(xlabel, fontsize=20, fontfamily='Times New Roman')
ax.set_ylabel(ylabel, fontsize=20, fontfamily='Times New Roman')
ax.set_zlabel(zlabel, fontsize=20, fontfamily='Times New Roman')
# ax.set_zlim(0, 20)
# ax.zaxis.set_major_locator(LinearLocator(6)) # 设置z轴主刻度的个数
# ax.zaxis.set_major_formatter('{x:.0f}') # 设置z轴主刻度的格式
ax.tick_params(labelsize=15) # 设置刻度值字体大小
labels = ax.get_xticklabels() + ax.get_yticklabels() + ax.get_zticklabels()
[label.set_fontname('Times New Roman') for label in labels] # 设置刻度值字体
# plt.savefig(filename+'.jpg', dpi=300)
plt.show()
plt.close('all')
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,43 @@
import numpy as np
# import os
# os.chdir('D:/data') # 设置文件保存的位置
def main():
x = np.arange(-5, 5, 0.25)
y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(x, y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
Plot_3D_Surface(x,y,Z)
def Plot_3D_Surface(x,y,matrix,filename='a.jpg', titlename='Plot 3D Surface'):
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
plt.subplots_adjust(bottom=0.1, right=0.65) # 调整位置
x, y = np.meshgrid(x, y)
surf = ax.plot_surface(x, y, matrix, cmap=cm.coolwarm, linewidth=0, antialiased=False) # Plot the surface.
ax.set_title(titlename, fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel('x', fontsize=30, fontfamily='Times New Roman') # 坐标标签
ax.set_ylabel('y', fontsize=30, fontfamily='Times New Roman') # 坐标标签
ax.set_zlabel('z', fontsize=30, fontfamily='Times New Roman') # 坐标标签
# ax.set_zlim(-1, 1) # 设置z轴的范围
ax.zaxis.set_major_locator(LinearLocator(5)) # 设置z轴主刻度的个数
ax.zaxis.set_major_formatter('{x:.2f}') # 设置z轴主刻度的格式
ax.tick_params(labelsize=15) # 设置刻度值字体大小
labels = ax.get_xticklabels() + ax.get_yticklabels() + ax.get_zticklabels()
[label.set_fontname('Times New Roman') for label in labels] # 设置刻度值字体
cax = plt.axes([0.75, 0.15, 0.05, 0.75]) # color bar的位置 [左,下,宽度, 高度]
cbar = fig.colorbar(surf, cax=cax) # color bar
cbar.ax.tick_params(labelsize=15) # 设置color bar刻度的字体大小
[l.set_family('Times New Roman') for l in cbar.ax.yaxis.get_ticklabels()] # 设置color bar刻度的字体
# plt.savefig(filename, dpi=800) # 保存图片文件
plt.show()
plt.close('all') # 关闭所有plt防止循环画图时占用内存
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,41 @@
import numpy as np
# import os
# os.chdir('D:/data') # 设置文件保存的位置
def main():
x = np.arange(-5, 5, 0.25)
y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(x, y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
Plot_Contour(x,y,Z)
def Plot_Contour(x,y,matrix,filename='a.jpg', titlename='Plot Contour'):
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.15, right=0.7) # 调整位置
x, y = np.meshgrid(x, y)
contour = ax.contourf(x,y,matrix,cmap='jet')
ax.set_title(titlename, fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel('x', fontsize=30, fontfamily='Times New Roman') # 坐标标签
ax.set_ylabel('y', fontsize=30, fontfamily='Times New Roman') # 坐标标签
# plt.xlabel('x')
# plt.ylabel('y')
ax.tick_params(labelsize=15) # 设置刻度值字体大小
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels] # 设置刻度值字体
cax = plt.axes([0.75, 0.15, 0.08, 0.73]) # color bar的位置 [左,下,宽度, 高度]
cbar = fig.colorbar(contour, cax=cax) # color bar
cbar.ax.tick_params(labelsize=15) # 设置color bar刻度的字体大小
[l.set_family('Times New Roman') for l in cbar.ax.yaxis.get_ticklabels()] # 设置color bar刻度的字体
# plt.savefig(filename, dpi=800) # 保存图片文件
plt.show()
plt.close('all') # 关闭所有plt防止循环画图时占用内存
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,30 @@
import numpy as np
# import os
# os.chdir('D:/data') # 设置文件保存的位置
def main():
x = np.arange(0.0, 2.0, 0.01)
y = 1 + np.sin(2 * np.pi * x)
Plot_Line(x,y)
def Plot_Line(x,y,filename='a.jpg', titlename='Plot Line'):
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.20, left=0.16)
ax.plot(x, y, '-o')
ax.grid()
ax.set_title(titlename, fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel('x', fontsize=30, fontfamily='Times New Roman') # 坐标标签
ax.set_ylabel('y', fontsize=30, fontfamily='Times New Roman') # 坐标标签
ax.tick_params(labelsize=20) # 设置刻度值字体大小
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels] # 设置刻度值字体
# plt.savefig(filename, dpi=800) # 保存图片文件
plt.show()
plt.close('all') # 关闭所有plt防止循环画图时占用内存
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,322 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/8734
函数调用目录:
1. x, y = read_one_dimensional_data(filename='a')
2. x, y, matrix = read_two_dimensional_data(filename='a')
3. write_one_dimensional_data(x, y, filename='a')
4. write_two_dimensional_data(x, y, matrix, filename='a')
5. plot(x, y, xlabel='x', ylabel='y', title='', filename='a')
6. plot_3d_surface(x, y, matrix, xlabel='x', ylabel='y', zlabel='z', title='', filename='a')
7. plot_contour(x, y, matrix, xlabel='x', ylabel='y', title='', filename='a')
8. plot_2d_scatter(x, y, value, xlabel='x', ylabel='y', title='', filename='a')
9. plot_3d_surface(x, y, z, value, xlabel='x', ylabel='y', zlabel='z', title='', filename='a')
10. creat_animation(image_names, duration_time=0.5, filename='a')
11. eigenvalue_array = calculate_eigenvalue_with_one_paramete(x, matrix)
12. eigenvalue_array = calculate_eigenvalue_with_two_parameters(x, y, matrix)
函数对应的功能:
1. 读取filename.txt文件中的一维数据y(x)
2. 读取filename.txt文件中的二维数据matrix(x,y)
3. 把一维数据y(x)写入filename.txt文件
4. 把二维数据matrix(x,y)写入filename.txt文件
5. 画y(x)图并保存到filename.jpg文件。具体画图格式可在函数中修改
6. 画3d_surface图并保存到filename.jpg文件。具体画图格式可在函数中修改
7. 画contour图并保存到filename.jpg文件。具体画图格式可在函数中修改
8. 画2d_scatter图并保存到filename.jpg文件。具体画图格式可在函数中修改
9. 画3d_scatter图并保存到filename.jpg文件。具体画图格式可在函数中修改
10. 制作动画
11. 在参数x下计算matrix函数的本征值eigenvalue_array[:, index]
12. 在参数(x,y)下计算matrix函数的本征值eigenvalue_array[:, :, index]
"""
import numpy as np
# import os
# os.chdir('D:/data')
def main():
pass # 读取数据 + 数据处理 + 保存新数据
# 1. 读取filename.txt文件中的一维数据y(x)
def read_one_dimensional_data(filename='a'):
f = open(filename+'.txt', 'r')
text = f.read()
f.close()
row_list = np.array(text.split('\n'))
dim_column = np.array(row_list[0].split()).shape[0]
x = np.array([])
y = np.array([])
for row in row_list:
column = np.array(row.split())
if column.shape[0] != 0:
x = np.append(x, [float(column[0])], axis=0)
y_row = np.zeros(dim_column-1)
for dim0 in range(dim_column-1):
y_row[dim0] = float(column[dim0+1])
if np.array(y).shape[0] == 0:
y = [y_row]
else:
y = np.append(y, [y_row], axis=0)
return x, y
# 2. 读取filename.txt文件中的二维数据matrix(x,y)
def read_two_dimensional_data(filename='a'):
f = open(filename+'.txt', 'r')
text = f.read()
f.close()
row_list = np.array(text.split('\n'))
dim_column = np.array(row_list[0].split()).shape[0]
x = np.array([])
y = np.array([])
matrix = np.array([])
for i0 in range(row_list.shape[0]):
column = np.array(row_list[i0].split())
if i0 == 0:
x_str = column[1::]
x = np.zeros(x_str.shape[0])
for i00 in range(x_str.shape[0]):
x[i00] = float(x_str[i00])
elif column.shape[0] != 0:
y = np.append(y, [float(column[0])], axis=0)
matrix_row = np.zeros(dim_column-1)
for dim0 in range(dim_column-1):
matrix_row[dim0] = float(column[dim0+1])
if np.array(matrix).shape[0] == 0:
matrix = [matrix_row]
else:
matrix = np.append(matrix, [matrix_row], axis=0)
return x, y, matrix
# 3. 把一维数据y(x)写入filename.txt文件
def write_one_dimensional_data(x, y, filename='a'):
with open(filename+'.txt', 'w') as f:
i0 = 0
for x0 in x:
f.write(str(x0)+' ')
if len(y.shape) == 1:
f.write(str(y[i0])+'\n')
elif len(y.shape) == 2:
for j0 in range(y.shape[1]):
f.write(str(y[i0, j0])+' ')
f.write('\n')
i0 += 1
# 4. 把二维数据matrix(x,y)写入filename.txt文件
def write_two_dimensional_data(x, y, matrix, filename='a'):
with open(filename+'.txt', 'w') as f:
f.write('0 ')
for x0 in x:
f.write(str(x0)+' ')
f.write('\n')
i0 = 0
for y0 in y:
f.write(str(y0))
j0 = 0
for x0 in x:
f.write(' '+str(matrix[i0, j0])+' ')
j0 += 1
f.write('\n')
i0 += 1
# 5. 画y(x)图并保存到filename.jpg文件。具体画图格式可在函数中修改。
def plot(x, y, xlabel='x', ylabel='y', title='', filename='a', show=1, save=0):
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.20, left=0.18)
ax.plot(x, y, '-o')
ax.grid()
ax.set_title(title, fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel(xlabel, fontsize=20, fontfamily='Times New Roman')
ax.set_ylabel(ylabel, fontsize=20, fontfamily='Times New Roman')
ax.tick_params(labelsize=20)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
if save == 1:
plt.savefig(filename+'.jpg', dpi=300)
if show == 1:
plt.show()
plt.close('all')
# 6. 画3d_surface图并保存到filename.jpg文件。具体画图格式可在函数中修改。
def plot_3d_surface(x, y, matrix, xlabel='x', ylabel='y', zlabel='z', title='', filename='a', show=1, save=0):
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
plt.subplots_adjust(bottom=0.1, right=0.65)
x, y = np.meshgrid(x, y)
if len(matrix.shape) == 2:
surf = ax.plot_surface(x, y, matrix, cmap=cm.coolwarm, linewidth=0, antialiased=False)
elif len(matrix.shape) == 3:
for i0 in range(matrix.shape[2]):
surf = ax.plot_surface(x, y, matrix[:,:,i0], cmap=cm.coolwarm, linewidth=0, antialiased=False)
ax.set_title(title, fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel(xlabel, fontsize=20, fontfamily='Times New Roman')
ax.set_ylabel(ylabel, fontsize=20, fontfamily='Times New Roman')
ax.set_zlabel(zlabel, fontsize=20, fontfamily='Times New Roman')
ax.zaxis.set_major_locator(LinearLocator(5))
ax.zaxis.set_major_formatter('{x:.2f}')
ax.tick_params(labelsize=15)
labels = ax.get_xticklabels() + ax.get_yticklabels() + ax.get_zticklabels()
[label.set_fontname('Times New Roman') for label in labels]
cax = plt.axes([0.80, 0.15, 0.05, 0.75])
cbar = fig.colorbar(surf, cax=cax)
cbar.ax.tick_params(labelsize=15)
for l in cbar.ax.yaxis.get_ticklabels():
l.set_family('Times New Roman')
if save == 1:
plt.savefig(filename+'.jpg', dpi=300)
if show == 1:
plt.show()
plt.close('all')
# 7. 画plot_contour图并保存到filename.jpg文件。具体画图格式可在函数中修改。
def plot_contour(x, y, matrix, xlabel='x', ylabel='y', title='', filename='a', show=1, save=0):
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.2, right=0.75, left = 0.16)
x, y = np.meshgrid(x, y)
contour = ax.contourf(x,y,matrix,cmap='jet')
ax.set_title(title, fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel(xlabel, fontsize=20, fontfamily='Times New Roman')
ax.set_ylabel(ylabel, fontsize=20, fontfamily='Times New Roman')
ax.tick_params(labelsize=15)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
cax = plt.axes([0.78, 0.17, 0.08, 0.71])
cbar = fig.colorbar(contour, cax=cax)
cbar.ax.tick_params(labelsize=15)
for l in cbar.ax.yaxis.get_ticklabels():
l.set_family('Times New Roman')
if save == 1:
plt.savefig(filename+'.jpg', dpi=300)
if show == 1:
plt.show()
plt.close('all')
# 8. 画2d_scatter图并保存到filename.jpg文件。具体画图格式可在函数中修改
def plot_2d_scatter(x, y, value, xlabel='x', ylabel='y', title='', filename='a', show=1, save=0):
import matplotlib.pyplot as plt
from matplotlib.axes._axes import _log as matplotlib_axes_logger
matplotlib_axes_logger.setLevel('ERROR')
fig = plt.figure()
ax = fig.add_subplot(111)
plt.subplots_adjust(bottom=0.2, right=0.8, left=0.2)
for i in range(np.array(x).shape[0]):
ax.scatter(x[i], y[i], marker='o', s=100*value[i], c=(1,0,0))
ax.set_title(title, fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel(xlabel, fontsize=20, fontfamily='Times New Roman')
ax.set_ylabel(ylabel, fontsize=20, fontfamily='Times New Roman')
ax.tick_params(labelsize=15)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
if save == 1:
plt.savefig(filename+'.jpg', dpi=300)
if show == 1:
plt.show()
plt.close('all')
# 9. 画3d_scatter图并保存到filename.jpg文件。具体画图格式可在函数中修改
def plot_3d_scatter(x, y, z, value, xlabel='x', ylabel='y', zlabel='z', title='', filename='a', show=1, save=0):
import matplotlib.pyplot as plt
from matplotlib.ticker import LinearLocator
from matplotlib.axes._axes import _log as matplotlib_axes_logger
matplotlib_axes_logger.setLevel('ERROR')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plt.subplots_adjust(bottom=0.1, right=0.8)
for i in range(np.array(x).shape[0]):
ax.scatter(x[i], y[i], z[i], marker='o', s=int(100*value[i]), c=(1,0,0))
ax.set_title(title, fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel(xlabel, fontsize=20, fontfamily='Times New Roman')
ax.set_ylabel(ylabel, fontsize=20, fontfamily='Times New Roman')
ax.set_zlabel(zlabel, fontsize=20, fontfamily='Times New Roman')
ax.tick_params(labelsize=15)
labels = ax.get_xticklabels() + ax.get_yticklabels() + ax.get_zticklabels()
[label.set_fontname('Times New Roman') for label in labels]
if save == 1:
plt.savefig(filename+'.jpg', dpi=300)
if show == 1:
plt.show()
plt.close('all')
# 10. 制作动画
def creat_animation(image_names, duration_time=0.5, filename='a'):
import imageio
images = []
for name in image_names:
image = name+'.jpg'
im = imageio.imread(image)
images.append(im)
imageio.mimsave(filename+'.gif', images, 'GIF', duration=duration_time) # durantion是延迟时间
# 11. 在参数x下计算matrix函数的本征值eigenvalue_array[:, index]
def calculate_eigenvalue_with_one_parameter(x, matrix):
dim_x = np.array(x).shape[0]
i0 = 0
if np.array(matrix(0)).shape==():
eigenvalue_array = np.zeros((dim_x, 1))
for x0 in x:
matrix0 = matrix(x0)
eigenvalue_array[i0, 0] = np.real(matrix0)
i0 += 1
else:
dim = np.array(matrix(0)).shape[0]
eigenvalue_array = np.zeros((dim_x, dim))
for x0 in x:
matrix0 = matrix(x0)
eigenvalue, eigenvector = np.linalg.eig(matrix0)
eigenvalue_array[i0, :] = np.sort(np.real(eigenvalue[:]))
i0 += 1
return eigenvalue_array
# 12. 在参数(x,y)下计算matrix函数的本征值eigenvalue_array[:, :, index]
def calculate_eigenvalue_with_two_parameters(x, y, matrix):
dim_x = np.array(x).shape[0]
dim_y = np.array(y).shape[0]
if np.array(matrix(0,0)).shape==():
eigenvalue_array = np.zeros((dim_y, dim_x, 1))
i0 = 0
for y0 in y:
j0 = 0
for x0 in x:
matrix0 = matrix(x0, y0)
eigenvalue_array[i0, j0, 0] = np.real(matrix0)
j0 += 1
i0 += 1
else:
dim = np.array(matrix(0, 0)).shape[0]
eigenvalue_array = np.zeros((dim_y, dim_x, dim))
i0 = 0
for y0 in y:
j0 = 0
for x0 in x:
matrix0 = matrix(x0, y0)
eigenvalue, eigenvector = np.linalg.eig(matrix0)
eigenvalue_array[i0, j0, :] = np.sort(np.real(eigenvalue[:]))
j0 += 1
i0 += 1
return eigenvalue_array
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,21 @@
import os
import time
start = time.time()
print('程序1开始的时间', time.ctime())
start1 = time.time()
os.chdir('D:') # 代码位置
os.system('python a.py') # 运行a.py
end1 = time.time()
print('程序1运行时间(min)=', (end1-start1)/60,'\n')
print('程序2开始的时间', time.ctime())
start2 = time.time()
os.chdir('E:') # 代码位置
os.system('python b.py') # 运行b.py
end2 = time.time()
print('程序2运行时间(min)=', (end2-start2)/60, '\n')
end = time.time()
print('总运行时间(min)=', (end-start)/60)

View File

@@ -0,0 +1,137 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/9129
"""
import os
import re
import time
import logging
logging.Logger.propagate = False
logging.getLogger().setLevel(logging.ERROR) # 只显示error级别的通知
def main():
# 参数
key_word_array = ['photonic', 'Berry phase']
original_path = 'D:\\文献'
# 查找所有的PDF文件路径
pdf_file_all = find_files_pdf(original_path)
print('\n该文件夹下总共有', len(pdf_file_all), '个PDF文件。\n')
f = open('error.txt','w',encoding='utf-8')
f.close()
for key_word in key_word_array:
f = open(str(key_word)+'.txt','w',encoding='utf-8')
f.write('该文件夹下总共有'+str(len(pdf_file_all))+'个PDF文件。\n')
f.close()
# 查找包含关键词的PDF文件
i0 = 1
begin = time.time()
for pdf_file in pdf_file_all:
print('查找第', i0, '个文件,', end='')
begin0 = time.time()
try:
content = get_text_from_pdf(pdf_file)
for key_word in key_word_array:
if re.search(re.compile(key_word),content):
print('发现文件!关键词', key_word, '对应的文件位置在:\n\n', pdf_file, '\n')
with open(str(key_word)+'.txt','a',encoding='utf-8') as f:
f.write('\n查找第'+str(i0)+'个文件时发现文件!位置在:\n'+pdf_file+'\n')
except:
print('出现异常!位置在:\n\n', pdf_file, '\n')
with open('error.txt','a',encoding='utf-8') as f:
f.write('\n解析第'+str(i0)+'个文件时出现异常!位置在:\n'+pdf_file+'\n')
end0 = time.time()
print('用时', end0-begin0, '')
i0 += 1
print('\n全部搜索结束!')
end = time.time()
print('\n总共用时:', (end-begin)/60, '')
def find_files_pdf(path): # 查找所有PDF文件
file_all = find_files(path)
pdf_file_all = []
for file0 in file_all:
if re.search(re.compile('^fdp.'),file0[::-1]): # 如果文件是以.pdf结尾
pdf_file_all.append(file0)
return pdf_file_all
def find_files(path): # 查找所有文件
file_all = []
path_next_loop = [path]
for i in range(10000): # i为文件在文件夹中的深度
file_all_in_one_loop, path_next_loop = find_files_loop_module(path_next_loop)
for file_in_one_loop in file_all_in_one_loop:
file_all.append(file_in_one_loop)
if path_next_loop == []:
break
return file_all
def find_files_loop_module(path_all): # 查找文件的一个循环模块
file_all_in_one_loop = []
path_next_loop = []
for path in path_all:
filenames = os.listdir(path)
for filename in filenames:
filename = os.path.join(path,filename)
if os.path.isfile(filename): # 如果是文件
file_all_in_one_loop.append(filename)
else: # 如果是文件夹
path_next_loop.append(filename)
return file_all_in_one_loop, path_next_loop
def get_text_from_pdf(file_path): # 从PDF中获取文本
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
# 用文件对象来创建一个pdf文档分析器
praser = PDFParser(open(file_path, 'rb'))
# 创建一个PDF文档
doc = PDFDocument()
# 连接分析器 与文档对象
praser.set_document(doc)
doc.set_parser(praser)
# 提供初始化密码
# 如果没有密码 就创建一个空的字符串
doc.initialize()
# 检测文档是否提供txt转换不提供就忽略
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
else:
# 创建PDf 资源管理器 来管理共享资源
rsrcmgr = PDFResourceManager()
# 创建一个PDF设备对象
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 创建一个PDF解释器对象
interpreter = PDFPageInterpreter(rsrcmgr, device)
# 循环遍历列表每次处理一个page的内容
content = ''
for page in doc.get_pages():
interpreter.process_page(page)
# 接受该页面的LTPage对象
layout = device.get_result()
# 这里layout是一个LTPage对象里面存放着这个 page 解析出的各种对象
# 包括 LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等
for x in layout:
if isinstance(x, LTTextBox):
# print(x.get_text().strip())
content = content + x.get_text().strip()
return content
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,63 @@
import os
os.chdir('D:/') # PDF文件存放的位置
import logging
logging.Logger.propagate = False
logging.getLogger().setLevel(logging.ERROR) # 只显示error级别的通知
def main():
content = get_text_from_pdf('a')
with open('a.txt', 'w', encoding='utf-8') as f:
f.write(content)
def get_text_from_pdf(filename):
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
path = filename+".pdf"
# 用文件对象来创建一个pdf文档分析器
praser = PDFParser(open(path, 'rb'))
# 创建一个PDF文档
doc = PDFDocument()
# 连接分析器 与文档对象
praser.set_document(doc)
doc.set_parser(praser)
# 提供初始化密码
# 如果没有密码 就创建一个空的字符串
doc.initialize()
# 检测文档是否提供txt转换不提供就忽略
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
else:
# 创建PDf 资源管理器 来管理共享资源
rsrcmgr = PDFResourceManager()
# 创建一个PDF设备对象
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 创建一个PDF解释器对象
interpreter = PDFPageInterpreter(rsrcmgr, device)
# 循环遍历列表每次处理一个page的内容
content = ''
for page in doc.get_pages():
interpreter.process_page(page)
# 接受该页面的LTPage对象
layout = device.get_result()
# 这里layout是一个LTPage对象里面存放着这个 page 解析出的各种对象
# 包括 LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等
for x in layout:
if isinstance(x, LTTextBox):
# print(x.get_text().strip())
content = content + x.get_text().strip()
return content
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,33 @@
"""
This code is supported by the website: https://www.guanjihuan.com
"""
from urllib import response
from bs4 import BeautifulSoup
import re
import requests
import urllib.request
import os
import ssl
from urllib.request import urlopen
ssl._create_default_https_context = ssl._create_unverified_context
html = urllib.request.urlopen("https://www.guanjihuan.com/archives/10897").read().decode('utf-8')
soup = BeautifulSoup(html, features='lxml')
all_a_tag = soup.find_all('a', href=True)
for a_tag in all_a_tag:
href = a_tag['href']
if re.search('https://www.merriam-webster.com/dictionary/', href):
print(href[43:])
exist = os.path.exists('prons/'+href[43:]+'.mp3')
if exist:
continue
header = {'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'} # 头部信息
html = urlopen(href).read().decode('utf-8')
mp3_file = re.findall('https://media.merriam-webster.com/audio/prons/en/us/mp3/.*.mp3",', html, re.S)[0][:-2]
print(mp3_file[:-2])
print()
r = requests.get(mp3_file, headers=header, stream=True)
with open('prons/'+href[43:]+'.mp3', 'wb') as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)

View File

@@ -0,0 +1,8 @@
# Words in webpage: https://www.guanjihuan.com/archives/10897
# installation:
# (1) pip install pygame
# (2) pip install --upgrade guan
import guan
guan.play_element_words()
# guan.play_element_words(random_on=0, show_translation=1, show_link=1, translation_time=2, rest_time=1)

View File

@@ -0,0 +1,29 @@
import numpy as np
# 设置
cpus = 7 # 使用的CPU个数等于提交任务的个数
parameter_array_all = np.arange(0, 10, 0.1) # 需要计算的参数
# 通过.sh脚本文件修改的任务指标。job_index从0开始最大值为cpus-1
job_index = -1
# 预处理
len_of_parameter_all = len(parameter_array_all) # 需要计算参数的个数
if len_of_parameter_all%cpus == 0:
len_parameter = int(len_of_parameter_all/cpus) # 一个CPU/任务需要计算参数的个数
parameter_array = parameter_array_all[job_index*len_parameter:(job_index+1)*len_parameter]
else:
len_parameter = int(len_of_parameter_all/(cpus-1)) # 一个CPU/任务需要计算参数的个数
if job_index != cpus-1:
parameter_array = parameter_array_all[job_index*len_parameter:(job_index+1)*len_parameter]
else:
parameter_array = parameter_array_all[job_index*len_parameter:len_of_parameter_all]
# 任务
with open('a'+str(job_index)+'.txt', 'w') as f:
for parameter in parameter_array:
result = parameter**2
f.write(str(parameter)+' '+str(result)+'\n')

View File

@@ -0,0 +1,5 @@
#!/bin/sh
#PBS -N task
#PBS -l nodes=1:ppn=1
export OMP_NUM_THREADS=1
python a.py

View File

@@ -0,0 +1,6 @@
f = open('combine.txt', 'w')
for job_index in range(7):
with open('a'+str(job_index)+'.txt', 'r') as f0:
text = f0.read()
f.write(text)
f.close()

View File

@@ -0,0 +1,14 @@
#!/bin/sh
for ((job_index=0; job_index<7; job_index++))
do
cp a.py a${job_index}.py
sed -i "s/job_index = -1/job_index = ${job_index}/" a${job_index}.py
cp a.sh a${job_index}.sh
sed -i "s/python a.py/python a${job_index}.py/" a${job_index}.sh
qsub a${job_index}.sh
done

View File

@@ -0,0 +1,88 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/13623
"""
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
from collections import Counter
import datetime
import random
import time
# time.sleep(random.uniform(0,1800)) # 爬虫简单伪装在固定时间后0到30分钟后开始运行。调试的时候把该语句注释。
year = datetime.datetime.now().year
month = datetime.datetime.now().month
day = datetime.datetime.now().day
# 获取链接
try:
with open('prb_link_list.txt', 'r', encoding='UTF-8') as f: # 如果文件存在
link_list = f.read().split('\n') # 历史已经访问过的链接(数组类型)
except:
with open('prb_link_list.txt', 'w', encoding='UTF-8') as f: # 如果文件不存在
link_list = []
f = open('prb_link_list.txt', 'a', encoding='UTF-8') # 打开文件(补充)
f.write('\nLink list obtained on '+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+':\n')
match_href = [] # 在本次运行中满足条件的链接
for loop in range(3):
if loop == 0:
start_link = "https://journals.aps.org/prb/recent?page=1" # 看第一页
elif loop == 1:
start_link = "https://journals.aps.org/prb/recent?page=2" # 看第二页
elif loop == 2:
start_link = "https://journals.aps.org/prb/recent?page=3" # 看第三页(三页基本上覆盖了当天的所有更新)
html = urlopen(start_link).read().decode('utf-8') # 打开网页
soup = BeautifulSoup(html, features='lxml') # 放入soup中
all_a_tag = soup.find_all('a', href=True) # 获取超链接标签
for a_tag in all_a_tag:
href = a_tag['href'] # 超链接字符串
if re.search('/abstract/', href): # 文章的链接
if re.search('https://journals.aps.org', href)==None: # 如果链接不是完整的,那么补充完整
href = 'https://journals.aps.org'+ href
if href not in match_href and href not in link_list and re.search('\?', href)==None: # 链接不重复
match_href.append(href)
f.write(href+'\n')
f.close()
# 获取摘要
try:
f = open('prb_all.txt', 'a', encoding='UTF-8') # 全部记录
except:
f = open('prb_all.txt', 'w', encoding='UTF-8') # 如果文件不存在
try:
f_month = open('prb_'+str(year)+'.'+str(month).rjust(2,'0')+'.txt', 'a', encoding='UTF-8') # 一个月的记录
except:
f_month = open('prb_'+str(year)+'.'+str(month).rjust(2,'0')+'.txt', 'w', encoding='UTF-8') # 如果文件不存在
f.write('\n\n['+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+'][total number='+str(len(match_href))+']\n\n\n')
f_month.write('\n\n['+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+'][total number='+str(len(match_href))+']\n\n\n')
print('total number=', len(match_href)) # 调试的时候显示这个
i00 = 0
for href in match_href:
i00 += 1
print('reading number', i00, '...') # 调试的时候显示这个
# time.sleep(random.uniform(10,110)) # 爬虫简单伪装休息一分钟左右。如果链接个数有60个那么程序运行时间延长60分钟。调试的时候把该语句注释。
try:
html = urlopen(href).read().decode('utf-8') # 打开文章链接
soup = BeautifulSoup(html, features='lxml') # 放入soup中
title = soup.title # 文章标题
f.write(str(title.get_text())+'\n\n')
f_month.write(str(title.get_text())+'\n\n')
f.write(str(href)+'\n\n') # 文章链接
f_month.write(str(href)+'\n\n')
abstract = re.findall('"yes"><p>.*</p><div', html, re.S)[0][9:-8] # 文章摘要
word_list = abstract.split(' ') # 划分单词
for word in word_list:
if re.search('<', word)==None and re.search('>', word)==None: # 有些内容满足过滤条件,因此信息可能会丢失。
f.write(word+' ')
f_month.write(word+' ')
f.write('\n\n\n')
f_month.write('\n\n\n')
except:
pass
f.close()

View File

@@ -0,0 +1,88 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/13623
"""
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
from collections import Counter
import datetime
import random
import time
# time.sleep(random.uniform(0,1800)) # 爬虫简单伪装在固定时间后0到30分钟后开始运行。调试的时候把该语句注释。
year = datetime.datetime.now().year
month = datetime.datetime.now().month
day = datetime.datetime.now().day
# 获取链接
try:
with open('prl_link_list.txt', 'r', encoding='UTF-8') as f: # 如果文件存在
link_list = f.read().split('\n') # 历史已经访问过的链接(数组类型)
except:
with open('prl_link_list.txt', 'w', encoding='UTF-8') as f: # 如果文件不存在
link_list = []
f = open('prl_link_list.txt', 'a', encoding='UTF-8') # 打开文件(补充)
f.write('\nLink list obtained on '+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+':\n')
match_href = [] # 在本次运行中满足条件的链接
for loop in range(3):
if loop == 0:
start_link = "https://journals.aps.org/prl/recent?page=1" # 看第一页
elif loop == 1:
start_link = "https://journals.aps.org/prl/recent?page=2" # 看第二页
elif loop == 2:
start_link = "https://journals.aps.org/prl/recent?page=3" # 看第三页(三页基本上覆盖了当天的所有更新)
html = urlopen(start_link).read().decode('utf-8') # 打开网页
soup = BeautifulSoup(html, features='lxml') # 放入soup中
all_a_tag = soup.find_all('a', href=True) # 获取超链接标签
for a_tag in all_a_tag:
href = a_tag['href'] # 超链接字符串
if re.search('/abstract/', href): # 文章的链接
if re.search('https://journals.aps.org', href)==None: # 如果链接不是完整的,那么补充完整
href = 'https://journals.aps.org'+ href
if href not in match_href and href not in link_list and re.search('\?', href)==None: # 链接不重复
match_href.append(href)
f.write(href+'\n')
f.close()
# 获取摘要
try:
f = open('prl_all.txt', 'a', encoding='UTF-8') # 全部记录
except:
f = open('prl_all.txt', 'w', encoding='UTF-8') # 如果文件不存在
try:
f_month = open('prl_'+str(year)+'.'+str(month).rjust(2,'0')+'.txt', 'a', encoding='UTF-8') # 一个月的记录
except:
f_month = open('prl_'+str(year)+'.'+str(month).rjust(2,'0')+'.txt', 'w', encoding='UTF-8') # 如果文件不存在
f.write('\n\n['+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+'][total number='+str(len(match_href))+']\n\n\n')
f_month.write('\n\n['+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+'][total number='+str(len(match_href))+']\n\n\n')
print('total number=', len(match_href)) # 调试的时候显示这个
i00 = 0
for href in match_href:
i00 += 1
print('reading number', i00, '...') # 调试的时候显示这个
# time.sleep(random.uniform(10,110)) # 爬虫简单伪装休息一分钟左右。如果链接个数有60个那么程序运行时间延长60分钟。调试的时候把该语句注释。
try:
html = urlopen(href).read().decode('utf-8') # 打开文章链接
soup = BeautifulSoup(html, features='lxml') # 放入soup中
title = soup.title # 文章标题
f.write(str(title.get_text())+'\n\n')
f_month.write(str(title.get_text())+'\n\n')
f.write(str(href)+'\n\n') # 文章链接
f_month.write(str(href)+'\n\n')
abstract = re.findall('"yes"><p>.*</p><div', html, re.S)[0][9:-8] # 文章摘要
word_list = abstract.split(' ') # 划分单词
for word in word_list:
if re.search('<', word)==None and re.search('>', word)==None: # 有些内容满足过滤条件,因此信息可能会丢失。
f.write(word+' ')
f_month.write(word+' ')
f.write('\n\n\n')
f_month.write('\n\n\n')
except:
pass
f.close()

View File

@@ -0,0 +1,41 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/13623
"""
import re
from collections import Counter
def main():
file_name = 'prb_all.txt'
with open(file_name, 'r', encoding='UTF-8') as f: # 打开文件
paper_list = f.read().split('\n\n\n') # 通过三个回车划分不同文章
word_list = []
ignore = ignore_words() # 过滤常见单词
for paper in paper_list:
word_list_in_one_paper = []
if len(paper)>20: # 通过字符串长度过滤日期
content_list = paper.split('\n\n') # 通过两个回车划分内容
for content in content_list:
if re.search('https://', content)==None: # 过滤文章链接
words = content.split(' ') # 通过空格划分单词
for word in words:
if word not in word_list_in_one_paper: # 一篇文章的某个单词只统计一次
if word not in ignore and len(word)>1: # 过滤词汇
word_list.append(word)
word_list_in_one_paper.append(word)
num = 300
most_common_words = Counter(word_list).most_common(num) # 统计出现最多的num个词汇
print('\n出现频率最高的前', num, '个词汇:')
for word in most_common_words:
print(word)
def ignore_words(): # 可自行增删
ignore = ['Phys.', 'the', 'to', 'of', 'in', 'under', 'and', 'by', 'The', 'at', 'with', 'up', 'be', 'above', 'below', 'are', 'is', 'for', 'that', 'as', 'we', '<a', 'abstract', 'abstract"','<span', 'which', 'We', 'such', 'has', 'two', 'these', 'it', 'all', 'results', 'result', 'each', 'have', 'between', 'on', 'an', 'can', 'also', 'from', 'Our', 'our', 'using', 'where', 'These', 'out', 'both', 'due', 'less', 'along', 'but', 'In', 'show', 'into', 'study', 'find', 'provide', 'change','not', 'open', 'this', 'show', 'into', 'study', 'find', 'provide', 'change', 'present', 'Using', 'large', 'This', 'However', 'appear', 'studied', 'obtain', 'been', 'Both', 'they', 'effects', 'effect', 'compute', 'more', 'does', 'shown', 'Based', 'reveal', 'highly', 'number', 'However,', 'was', 'near', 'full', 'based', 'several', 'suggest', 'agreement', 'predicted', 'values', 'work', 'emphasize', 'without', 'or', 'work,', 'studies', 'future', 'identify', 'present.', 'predict', 'presence', 'their', 'were', 'From', 'its', 'By', 'how', 'ground', 'observed', 'recent', 'For', 'other', 'Here', 'test', 'further', 'Its', 'similar', 'however,', 'range', 'within', 'value', 'possible', 'may', 'than', 'low', 'us', 'obtained', 'around', 'consider', 'about', 'very', 'will', 'when', 'played', 'consist', 'consists', 'Here,', 'observe', 'gives', 'It', 'over', 'cannot', 'As', 'whose', 'new', 'some', 'only', 'from', 'yields', 'shows', 'data', 'direct', 'related', 'different', 'evidence', 'role', 'function', 'origin', 'specific', 'set', 'confirm', 'give', 'Moreover', 'develop', 'including', 'could', 'used', 'means', 'allows', 'make', 'e.g.,', 'provides', 'system', 'systems', 'field', 'fields', 'model', 'model,', 'state', 'states', 'states.', 'state.', 'band', 'bands', 'method', 'methods', 'nature', 'rate', 'zero', 'single', 'theory', 'first', 'one', 'complex', 'approach', 'schemes', 'terms', 'even', 'case', 'analysis', 'weight', 'volume', 'evolution', 'well', 'external', 'measured', 'introducing', 'dependence', 'properties', 'demonstrate', 'remains', 'through', 'measurements', 'samples', 'findings', 'respect', 'investigate', 'behavior', 'importance', 'considered', 'experimental', 'increase', 'propose', 'follows', 'increase', 'emerged', 'interesting', 'behaviors', 'influenced', 'paramount', 'indicate', 'Rev.', 'concepts', 'induced', 'zone', 'regions', 'exact', 'contribution', 'behavior', 'formation', 'measurements.', 'utilizing', 'constant', 'regime', 'features', 'strength', 'compare', 'determined', 'combination', 'compare', 'determined', 'At', 'inside', 'ambient', 'then', 'important', 'report', 'Moreover,', 'Despite', 'found', 'because', 'process', 'and,', 'significantly', 'realized', 'much', 'natural', 'since', 'grows', 'any', 'compared', 'while', 'forms.', 'appears', 'indicating', 'coefficient', 'suggested', 'time', 'exhibits', 'calculations.', 'developed', 'array', 'discuss', 'field', 'becomes', 'allowing', 'indicates', 'via', 'introduce', 'considering', 'times.', 'constructed', 'explain', 'form', 'owing', 'parameters.', 'parameter', 'operation', 'probe', 'experiments', 'interest', 'strategies', 'seen', 'emerge', 'generic', 'geometry', 'numbers', 'observation', 'avenue', 'theretically', 'three', 'excellent', 'amount', 'notable', 'example', 'being', 'promising', 'latter', 'little', 'imposed', 'put', 'resource', 'together', 'produce', 'successfully','there', 'enhanced', 'this', 'great', 'dirven', 'increasing','should', 'otherwise', 'Further', 'field,', 'known', 'changes', 'still', 'beyond', 'various', 'center', 'previously', 'way', 'peculiar', 'detailed', 'understanding', 'good', 'years', 'where', 'Me', 'origins', 'years.', 'attributed', 'known,', 'them', 'reported', 'no', 'systems', 'agree', 'examined', 'rise', 'calculate', 'those', 'particular', 'relation', 'defined', 'either', 'again', 'current', 'exhibit', 'calculated', 'here', 'made', 'Further', 'consisting', 'constitutes', 'originated', 'if', 'exceed', 'access']
return ignore
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,88 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/14684
"""
import sympy
# 定义符号
print()
print('定义符号:')
x, y, z = sympy.symbols('x y z') # 使用sympy.symbols
print(x)
print(y+1)
print(z**2)
print()
# 替换Substitution
print('变量替换:')
expression_1 = x**2+1
value_1 = expression_1.subs(x, 3) # 使用.subs()方法
print(value_1)
print()
# 字符串转成符号表达式
print('字符串转成符号表达式:')
expression_string = 'x**3+1'
print(expression_string)
expression_2 = sympy.sympify(expression_string) # 使用sympy.sympify()
print(expression_2)
value_2 = expression_2.subs(x, 2)
print(value_2)
print()
# 简化表达式
print('简化表达式:')
expression_3 = sympy.simplify(sympy.sin(x)**2 + sympy.cos(x)**2) # 使用sympy.simplify()
print(expression_3)
print()
# 符号矩阵
print('符号矩阵:')
a, b = sympy.symbols('a b')
matrix = sympy.Matrix([[1, a], [0, b]]) # 使用sympy.Matrix()
print(matrix)
print()
sympy.init_printing(use_unicode=True)
# 符号矩阵的特征值和特征向量
print('符号矩阵的特征值和特征向量:')
eigenvalue = matrix.eigenvals() # 使用.eigenvals()方法
print('特征值\n', eigenvalue, '\n')
sympy.pprint(eigenvalue) # 使用sympy.pprint()输出
print('\n', sympy.pretty(eigenvalue)) # 使用sympy.pretty()美化后输出
print()
eigenvector = matrix.eigenvects() # 使用.eigenvects()方法
print('特征向量\n', eigenvector, '\n')
sympy.pprint(eigenvector)
print('\n', sympy.pretty(eigenvector))
print()
P, D = matrix.diagonalize() # 使用.diagonalize()方法
print('特征值\n', D, '\n')
print(sympy.pretty(D), '\n')
print('特征向量\n', P, '\n')
print(sympy.pretty(P), '\n')
print()
print('特征值\n', D.subs(a, -4).subs(b, 2), '\n')
print(sympy.pretty(D.subs(a, -4).subs(b, 2)), '\n')
print('特征向量\n', P.subs(a, -4).subs(b, 2), '\n')
print(sympy.pretty(P.subs(a, -4).subs(b, 2)), '\n')
print()
# 和numpy对比
print('和numpy对比')
import numpy as np
matrix = np.array([[1, -4], [0, 2]])
eigenvalue, eigenvector = np.linalg.eig(matrix)
print('特征值\n', eigenvalue)
print('特征向量\n', eigenvector)
print()

View File

@@ -0,0 +1,32 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/17789
"""
import numpy as np
def hamiltonian(width=2, length=2):
h00 = np.zeros((width*length, width*length))
for i0 in range(length):
for j0 in range(width-1):
h00[i0*width+j0, i0*width+j0+1] = 1
h00[i0*width+j0+1, i0*width+j0] = 1
for i0 in range(length-1):
for j0 in range(width):
h00[i0*width+j0, (i0+1)*width+j0] = 1
h00[(i0+1)*width+j0, i0*width+j0] = 1
return h00
print('矩阵:\n', hamiltonian(), '\n')
eigenvalue, eigenvector = np.linalg.eig(hamiltonian())
print('eig求解特征值', eigenvalue)
print('eig求解特征向量\n',eigenvector)
print('判断特征向量是否正交:\n', np.dot(eigenvector.transpose(), eigenvector))
print()
eigenvalue, eigenvector = np.linalg.eigh(hamiltonian())
print('eigh求解特征值', eigenvalue)
print('eigh求解特征向量\n',eigenvector)
print('判断特征向量是否正交:\n', np.dot(eigenvector.transpose(), eigenvector))

View File

@@ -0,0 +1,37 @@
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
import datetime
year = datetime.datetime.now().year
month = datetime.datetime.now().month
day = datetime.datetime.now().day
f = open('nature_physics.html', 'w', encoding='UTF-8')
f.write('<meta charset="utf-8"><style type="text/css">a{text-decoration: none;color: #0a5794;}a:hover {text-decoration: underline;color: red; }</style>')
f.write('<p>'+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+' 已更新</p>')
match_href = []
start_link = "https://www.nature.com/nphys/research-articles"
html = urlopen(start_link).read().decode('utf-8') # 打开网页
soup = BeautifulSoup(html, features='lxml') # 放入soup中
all_article = soup.find_all('article', {"class":"u-full-height c-card c-card--flush"})
for article in all_article:
all_a_tag = article.find_all('a', href=True) # 获取超链接标签
for a_tag in all_a_tag:
href = a_tag['href'] # 超链接字符串
if re.search('/articles/', href): # 文章的链接
if re.search('https://www.nature.com', href)==None: # 如果链接不是完整的,那么补充完整
href = 'https://www.nature.com'+ href
if href not in match_href and re.search('\?', href)==None: # 链接不重复
match_href.append(href)
f.write('<li><a target=\"_blank\" href=\"')
f.write(href) # 文章链接
f.write('\">')
f.write(a_tag.get_text())
f.write('</a>&nbsp;&nbsp;')
time = article.find('time', {"class": "c-meta__item c-meta__item--block-at-lg"}).get_text()
f.write(time+'</li>')
f.close()

View File

@@ -0,0 +1,36 @@
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
import datetime
year = datetime.datetime.now().year
month = datetime.datetime.now().month
day = datetime.datetime.now().day
f = open('physics_magazine.html', 'w', encoding='UTF-8')
f.write('<meta charset="utf-8"><style type="text/css">a{text-decoration: none;color: #0a5794;}a:hover {text-decoration: underline;color: red; }</style>')
f.write('<p>'+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+' 已更新</p>')
match_href = []
start_link = "https://physics.aps.org/"
html = urlopen(start_link).read().decode('utf-8') # 打开网页
soup = BeautifulSoup(html, features='lxml') # 放入soup中
all_articles = soup.find_all('div', {"class":"feed-item-details"})
for article in all_articles:
all_a_tag = article.find_all('a', href=True) # 获取超链接标签
for a_tag in all_a_tag:
href = a_tag['href'] # 超链接字符串
if re.search('/articles/', href): # 文章的链接
if re.search('https://physics.aps.org', href)==None: # 如果链接不是完整的,那么补充完整
href = 'https://physics.aps.org'+ href
if href not in match_href:
match_href.append(href)
f.write('<li><a target=\"_blank\" href=\"')
f.write(href) # 文章链接
f.write('\">')
f.write(a_tag.get_text())
f.write('</a>&nbsp;&nbsp;')
time = article.find('time', {"class": "feed-item-date"}).get_text()
f.write(time+'</li>')
f.close()

View File

@@ -0,0 +1,42 @@
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
import datetime
year = datetime.datetime.now().year
month = datetime.datetime.now().month
day = datetime.datetime.now().day
f = open('prb.html', 'w', encoding='UTF-8')
f.write('<meta charset="utf-8"><style type="text/css">a{text-decoration: none;color: #0a5794;}a:hover {text-decoration: underline;color: red; }</style>')
f.write('<p>'+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+' 已更新</p>')
match_href = []
for loop in range(1):
if loop == 0:
start_link = "https://journals.aps.org/prb/recent" # 看第一页
# elif loop == 1:
# start_link = "https://journals.aps.org/prb/recent?page=2" # 看第二页
html = urlopen(start_link).read().decode('utf-8') # 打开网页
soup = BeautifulSoup(html, features='lxml') # 放入soup中
all_article = soup.find_all('div', {"class":"article panel article-result"})
for article in all_article:
all_a_tag = article.find_all('a', href=True) # 获取超链接标签
for a_tag in all_a_tag:
href = a_tag['href'] # 超链接字符串
if re.search('/abstract/', href): # 文章的链接
if re.search('https://journals.aps.org', href)==None: # 如果链接不是完整的,那么补充完整
href = 'https://journals.aps.org'+ href
if href not in match_href and re.search('\?', href)==None: # 链接不重复
match_href.append(href)
f.write('<li><a target=\"_blank\" href=\"')
f.write(href) # 文章链接
f.write('\">')
f.write(a_tag.get_text())
f.write('</a>&nbsp;&nbsp;')
info = article.find('h6', {"class": "pub-info"}).get_text()
f.write(re.findall(' Published .*', info, re.S)[0][12:]+'</li>')
f.close()

View File

@@ -0,0 +1,42 @@
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
import datetime
year = datetime.datetime.now().year
month = datetime.datetime.now().month
day = datetime.datetime.now().day
f = open('prl.html', 'w', encoding='UTF-8')
f.write('<meta charset="utf-8"><style type="text/css">a{text-decoration: none;color: #0a5794;}a:hover {text-decoration: underline;color: red; }</style>')
f.write('<p>'+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+' 已更新</p>')
match_href = []
for loop in range(1):
if loop == 0:
start_link = "https://journals.aps.org/prl/recent" # 看第一页
# elif loop == 1:
# start_link = "https://journals.aps.org/prl/recent?page=2" # 看第二页
html = urlopen(start_link).read().decode('utf-8') # 打开网页
soup = BeautifulSoup(html, features='lxml') # 放入soup中
all_article = soup.find_all('div', {"class":"article panel article-result"})
for article in all_article:
all_a_tag = article.find_all('a', href=True) # 获取超链接标签
for a_tag in all_a_tag:
href = a_tag['href'] # 超链接字符串
if re.search('/abstract/', href): # 文章的链接
if re.search('https://journals.aps.org', href)==None: # 如果链接不是完整的,那么补充完整
href = 'https://journals.aps.org'+ href
if href not in match_href and re.search('\?', href)==None: # 链接不重复
match_href.append(href)
f.write('<li><a target=\"_blank\" href=\"')
f.write(href) # 文章链接
f.write('\">')
f.write(a_tag.get_text())
f.write('</a>&nbsp;&nbsp;')
info = article.find('h6', {"class": "pub-info"}).get_text()
f.write(re.findall(' Published.*', info, re.S)[0][12:]+'</li>')
f.close()

View File

@@ -0,0 +1,61 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/17937
"""
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
import datetime
year = datetime.datetime.now().year
month = datetime.datetime.now().month
day = datetime.datetime.now().day
# 获取链接
match_href = []
# 由于没有模拟登录知乎,因此只能爬取到最新的两篇文章
authors = ["https://www.zhihu.com/people/guanjihuan/posts", # Guan
]
for i0 in range(len(authors)):
start_link = authors[i0]
html = urlopen(start_link).read().decode('utf-8') # 打开网页
soup = BeautifulSoup(html, features='lxml') # 放入soup中
all_a_tag = soup.find_all('a', href=True) # 获取超链接标签
for a_tag in all_a_tag:
href = a_tag['href'] # 超链接字符串
if re.search('//zhuanlan.zhihu.com/p/', href) and not re.search('edit', href): # 文章的链接
if re.search('https:', href)==None: # 如果链接不是完整的,那么补充完整
href = 'https:'+ href
if href not in match_href:
match_href.append(href)
# 对链接进行排序
numbers = []
match_href_new = []
for href in match_href:
numbers.append(int(href[29:]))
numbers.sort(reverse = True)
for n in numbers:
match_href_new.append('https://zhuanlan.zhihu.com/p/'+str(n))
# 获取内容并写入文件
f = open('zhihu.html', 'w', encoding='UTF-8')
f.write('<meta charset="utf-8"><style type="text/css">a{text-decoration: none;color: #0a5794;}a:hover {text-decoration: underline;color: red; }</style>')
f.write('<p>'+str(year)+'.'+str(month).rjust(2,'0')+'.'+str(day).rjust(2,'0')+' 已更新</p>')
for href in match_href_new:
try:
html = urlopen(href).read().decode('utf-8') # 打开文章链接
soup = BeautifulSoup(html, features='lxml') # 放入soup中
title = soup.title # 文章标题
f.write('<li><a target=\"_blank\" href=\"')
f.write(str(href)) # 文章链接
f.write('\">')
f.write(str(title.get_text()[:-5]))
f.write('</a>&nbsp;&nbsp;')
author = soup.find("span", {"class": "UserLink AuthorInfo-name"})
f.write(str(author.get_text()+'&nbsp;&nbsp;'))
post_time = soup.find("div", {"class" : "ContentItem-time"})
f.write(str(post_time.get_text()[4:-6])+'</li>')
except:
pass
f.close()

View File

@@ -0,0 +1,4 @@
import guan
guan.change_directory_by_replacement(current_key_word='code', new_key_word='data')
with open('data.txt', 'w') as f: # 保存数据
f.write('Hello world')

View File

@@ -0,0 +1,4 @@
import guan
guan.change_directory_by_replacement(current_key_word='working/code', new_key_word='local/data')
with open('data.txt', 'w') as f: # 保存数据
f.write('Hello world')

View File

@@ -0,0 +1,9 @@
import os
code_path = os.getcwd() # 当前代码文件的路径
data_path = code_path.replace('\\', '/') # \改为/,防止路径报错
data_path = data_path.replace('code', 'data') # 把路径中code改为data
if os.path.exists(data_path) == False: # 如果文件夹不存在,新建文件夹
os.makedirs(data_path)
os.chdir(data_path) # 转到数据的存放路径
with open('data.txt', 'w') as f: # 保存数据
f.write('Hello world')

View File

@@ -0,0 +1,42 @@
import numpy as np
from numba import jit
import time
def for_sum(numpy_array):
sum = 0
for number in numpy_array:
sum += number
return sum
@jit
def numba_for_sum(numpy_array):
sum = 0
for number in numpy_array:
sum += number
return sum
numpy_array = np.arange(0,1e8,1)
start = time.time()
result = sum(numpy_array)
end = time.time()
print('\nresult:', result)
print('python中sum()函数求和时间:\n', end - start)
start = time.time()
result = np.sum(numpy_array)
end = time.time()
print('\nresult:', result)
print('numpy.sum()函数求和时间:\n', end - start)
start = time.time()
result = for_sum(numpy_array)
end = time.time()
print('\nresult:', result)
print('for循环求和numpy数组的时间\n', end - start)
start = time.time()
result = numba_for_sum(numpy_array)
end = time.time()
print('\nresult:', result)
print('numba加速for循环求和numpy数组的时间\n', end - start, '\n')

View File

@@ -0,0 +1,2 @@
import cmath
print(cmath.exp(1j*cmath.pi))

View File

@@ -0,0 +1,26 @@
import copy
import numpy as np
array_1 = [1, 2, 3]
array_2 = array_1
array_1[0] = 100
print('array_1=', array_1)
print('array_2=', array_2, '\n')
array_1 = np.array([1, 2, 3])
array_2 = array_1
array_1[0] = 100
print('array_1=', array_1)
print('array_2=', array_2, '\n')
array_1 = [1, 2, 3]
array_2 = copy.deepcopy(array_1)
array_1[0] = 100
print('array_1=', array_1)
print('array_2=', array_2, '\n')
array_1 = np.array([1, 2, 3])
array_2 = copy.deepcopy(array_1)
array_1[0] = 100
print('array_1=', array_1)
print('array_2=', array_2)

View File

@@ -0,0 +1,7 @@
import functools
def func(x, y, z):
return x-y+z
partial_func = functools.partial(func, x=5, z=0)
print(partial_func(y=2))

View File

@@ -0,0 +1,13 @@
import math
print(math.pi)
print(math.e)
print(math.exp(1))
print(math.cos(math.pi))
print(math.sqrt(2), '\n')
import numpy as np
print(np.pi)
print(np.e)
print(np.exp(1))
print(np.cos(np.pi))
print(np.sqrt(2))

View File

@@ -0,0 +1,8 @@
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10), range(10))
ax.set_title('Example', fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel('x', fontsize=20, fontfamily='Times New Roman')
ax.set_ylabel('y', fontsize=20, fontfamily='Times New Roman')
plt.show()

View File

@@ -0,0 +1,23 @@
from multiprocessing import Process
import time
def f(name):
time.sleep(5)
print('Hello', name)
if __name__ == '__main__':
start_time = time.time()
p1 = Process(target=f, args=('Bob',))
p2 = Process(target=f, args=('Alice',))
p1.start()
p2.start()
p1.join()
p2.join()
end_time = time.time()
print(end_time - start_time, '\n')
start_time = time.time()
f('Bob')
f('Alice')
end_time = time.time()
print(end_time - start_time)

View File

@@ -0,0 +1,21 @@
import numpy as np
np.zeros((2, 3)) # 零矩阵
np.identity(3) # 单位矩阵
np.diag([1, 3, 5]) # 对角矩阵
matrix1 = np.array([[3, 5+1j], [2, 7]]) # numpy矩阵
matrix1.shape # 矩阵的维度
matrix1.transpose() # 矩阵转置
matrix1.conj() # 矩阵所有元素共轭
np.conj(matrix1) # 矩阵所有元素共轭(同上)
np.arange(1, 5, 1) # 数列(左闭右开)
np.linspace(-2, 2, 5) # 数列(左闭右闭)
np.random.uniform(-2, 2) # 随机数
np.random.randint(0, 2) # 随机整数(左闭右开)
np.sort([1, 7, 0, 3]) # 排列
np.argsort([1, 7, 0, 3]) # 排列索引
np.linalg.det(matrix1) # 行列式
matrix2 = np.linalg.inv(matrix1) # 求逆
np.matmul(matrix1, matrix2) # 矩阵乘积
np.dot(matrix1, matrix2) # 矩阵乘积(同上)
eigenvalue, eigenvector = np.linalg.eig(matrix1) # 求本征值,本征向量
matrix3 = np.append(matrix1, matrix2, axis=0) # 增加数组元素或者矩阵的行

View File

@@ -0,0 +1,6 @@
import os
os.getcwd() # 获取路径
if os.path.exists('new_dir') == False: # 判断路径是否存在
os.makedirs('new_dir') # 新建文件夹
os.chdir('new_dir') # 切换到该文件夹
print(os.walk('/')) # 游走目录

View File

@@ -0,0 +1,5 @@
import time
start_time = time.time()
time.sleep(5)
end_time = time.time()
print(end_time-start_time)

View File

@@ -0,0 +1,31 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/23000
"""
string_array = ['', '', '3', '.']
for string in string_array:
# 编码
gb2312 = string.encode(encoding="gb2312")
gbk = string.encode(encoding="gbk")
gb18030 = string.encode(encoding="gb18030")
uft8 = string.encode(encoding="utf-8")
# 查看
print('字符串 =', string, ' | 数据类型 =', type(string), ' | 长度 =', len(string))
print('gb2312编码 =', gb2312, ' | 数据类型 =', type(gb2312), ' | 长度 =', len(gb2312))
print('gbk编码 =', gbk, ' | 数据类型 =', type(gbk), ' | 长度 =', len(gbk))
print('gb18030编码 =', gb18030, ' | 数据类型 =', type(gb18030), ' | 长度 =', len(gb18030))
print('utf8编码 =', uft8, ' | 数据类型 =', type(uft8), ' | 长度 =', len(uft8))
print()
# 乱码例子
string = '关关'
uft8 = string.encode(encoding="utf-8")
new_string_1 = uft8.decode(encoding="utf-8")
new_string_2 = uft8.decode(encoding="gbk")
print("使用utf-8解码utf-8编码的数据 =", new_string_1)
print("使用gbk解码utf-8编码的数据 =", new_string_2)

View File

@@ -0,0 +1,41 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/25453
"""
import os
# 选取某个目录
directory = 'E:/'
def main():
for root, dirs, files in os.walk(directory):
for i0 in range(len(files)):
if 'pdf' in files[i0] or 'djvu' in files[i0]: # 满足某个条件的文件
# 显示旧文件名
name = files[i0]
print(name) # 显示旧文件名
# 显示新文件名
new_name = modify_name(name)
print(new_name)
print()
# # 修改文件名。注意需要检查前面的代码尤其是modify_name的规则看是否都满足再运行下面的代码否则文件名的修改会出现遗漏或混乱。
# if new_name != None:
# os.rename(root+'/'+name, root+'/'+new_name)
def modify_name(name): # 按某种规则修改文件名
array = name.split(' - ') # 通过' - '把这类型的文件名切开
if len(array) != 3:
print('Miss:', name)
new_name = None # 如果不满足规则,则不修改
else:
new_name= array[1]+' - '+array[0]+' - '+array[2] # 做个对调
return new_name
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,35 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/25685
"""
# 注意这个程序请小心使用防止误操作把系统文件或个人文件破坏。在选取好directory目录后请经过再三确认无误后再运行尤其是directory的层级不能太高。
def main():
# 选取某个目录
directory = 'E:/test/all_files'
move_all_files_to_root_directory(directory)
# import guan
# guan.move_all_files_to_root_directory(directory)
def move_all_files_to_root_directory(directory):
import os
import shutil
for root, dirs, files in os.walk(directory):
for i0 in range(len(files)):
# print(root) # 文件对应目录
# print(files[i0], '\n') # 文件
shutil.move(root+'/'+files[i0], directory+'/'+files[i0]) # 移动所有文件至根目录
for i0 in range(100): # 多次尝试删除层数比较多的空文件夹例如100层
for root, dirs, files in os.walk(directory):
try:
os.rmdir(root) # 删除空文件夹
except:
pass
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,116 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/25699
"""
def main():
directory = 'E:/literature'
write_file_list_in_markdown(directory)
def write_file_list_in_markdown(directory='./', filename='a', reverse_positive_or_negative=1, starting_from_h1=None, banned_file_format=[], hide_file_format=None, divided_line=None, show_second_number=None, show_third_number=None):
import os
f = open(filename+'.md', 'w', encoding="utf-8")
filenames1 = os.listdir(directory)
u0 = 0
for filename1 in filenames1[::reverse_positive_or_negative]:
filename1_with_path = os.path.join(directory,filename1)
if os.path.isfile(filename1_with_path): # 文件
if os.path.splitext(filename1)[1] not in banned_file_format:
if hide_file_format == None:
f.write('+ '+str(filename1)+'\n\n')
else:
f.write('+ '+str(os.path.splitext(filename1)[0])+'\n\n')
else: # 文件夹
u0 += 1
if divided_line != None and u0 != 1:
f.write('--------\n\n')
if starting_from_h1 == None:
f.write('#')
f.write('# '+str(filename1)+'\n\n')
filenames2 = os.listdir(filename1_with_path)
i0 = 0
for filename2 in filenames2[::reverse_positive_or_negative]:
filename2_with_path = os.path.join(directory, filename1, filename2)
if os.path.isfile(filename2_with_path): # 文件
if os.path.splitext(filename2)[1] not in banned_file_format:
if hide_file_format == None:
f.write('+ '+str(filename2)+'\n\n')
else:
f.write('+ '+str(os.path.splitext(filename2)[0])+'\n\n')
else: # 文件夹
i0 += 1
if starting_from_h1 == None:
f.write('#')
if show_second_number != None:
f.write('## '+str(i0)+'. '+str(filename2)+'\n\n')
else:
f.write('## '+str(filename2)+'\n\n')
j0 = 0
filenames3 = os.listdir(filename2_with_path)
for filename3 in filenames3[::reverse_positive_or_negative]:
filename3_with_path = os.path.join(directory, filename1, filename2, filename3)
if os.path.isfile(filename3_with_path): # 文件
if os.path.splitext(filename3)[1] not in banned_file_format:
if hide_file_format == None:
f.write('+ '+str(filename3)+'\n\n')
else:
f.write('+ '+str(os.path.splitext(filename3)[0])+'\n\n')
else: # 文件夹
j0 += 1
if starting_from_h1 == None:
f.write('#')
if show_third_number != None:
f.write('### ('+str(j0)+') '+str(filename3)+'\n\n')
else:
f.write('### '+str(filename3)+'\n\n')
filenames4 = os.listdir(filename3_with_path)
for filename4 in filenames4[::reverse_positive_or_negative]:
filename4_with_path = os.path.join(directory, filename1, filename2, filename3, filename4)
if os.path.isfile(filename4_with_path): # 文件
if os.path.splitext(filename4)[1] not in banned_file_format:
if hide_file_format == None:
f.write('+ '+str(filename4)+'\n\n')
else:
f.write('+ '+str(os.path.splitext(filename4)[0])+'\n\n')
else: # 文件夹
if starting_from_h1 == None:
f.write('#')
f.write('#### '+str(filename4)+'\n\n')
filenames5 = os.listdir(filename4_with_path)
for filename5 in filenames5[::reverse_positive_or_negative]:
filename5_with_path = os.path.join(directory, filename1, filename2, filename3, filename4, filename5)
if os.path.isfile(filename5_with_path): # 文件
if os.path.splitext(filename5)[1] not in banned_file_format:
if hide_file_format == None:
f.write('+ '+str(filename5)+'\n\n')
else:
f.write('+ '+str(os.path.splitext(filename5)[0])+'\n\n')
else: # 文件夹
if starting_from_h1 == None:
f.write('#')
f.write('##### '+str(filename5)+'\n\n')
filenames6 = os.listdir(filename5_with_path)
for filename6 in filenames6[::reverse_positive_or_negative]:
filename6_with_path = os.path.join(directory, filename1, filename2, filename3, filename4, filename5, filename6)
if os.path.isfile(filename6_with_path): # 文件
if os.path.splitext(filename6)[1] not in banned_file_format:
if hide_file_format == None:
f.write('+ '+str(filename6)+'\n\n')
else:
f.write('+ '+str(os.path.splitext(filename6)[0])+'\n\n')
else: # 文件夹
if starting_from_h1 == None:
f.write('#')
f.write('###### '+str(filename6)+'\n\n')
f.close()
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,55 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/25943
"""
def main():
directory = 'E:/test'
creat_necessary_file(directory)
# delete_file_with_specific_name(directory)
# import guan
# guan.creat_necessary_file(directory)
# guan.delete_file_with_specific_name(directory)
def creat_necessary_file(directory, filename='readme', file_format='.md', content='', overwrite=None, ignored_directory_with_words=[]):
import os
directory_with_file = []
ignored_directory = []
for root, dirs, files in os.walk(directory):
for i0 in range(len(files)):
if root not in directory_with_file:
directory_with_file.append(root)
if files[i0] == filename+file_format:
if root not in ignored_directory:
ignored_directory.append(root)
if overwrite == None:
for root in ignored_directory:
directory_with_file.remove(root)
ignored_directory_more =[]
for root in directory_with_file:
for word in ignored_directory_with_words:
if word in root:
if root not in ignored_directory_more:
ignored_directory_more.append(root)
for root in ignored_directory_more:
directory_with_file.remove(root)
for root in directory_with_file:
os.chdir(root)
f = open(filename+file_format, 'w', encoding="utf-8")
f.write(content)
f.close()
def delete_file_with_specific_name(directory, filename='readme', file_format='.md'):
import os
for root, dirs, files in os.walk(directory):
for i0 in range(len(files)):
if files[i0] == filename+file_format:
os.remove(root+'/'+files[i0])
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,45 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/26113
"""
# 仅支持文件名判断是否重复,不支持对文件内容的判断。
# 如需对文件名和内容都判断,需要计算文件的哈希值。这里暂时不考虑。
def main():
directory = 'E:/test'
repeated_file = find_repeated_file_with_same_filename(directory)
print(repeated_file)
# import guan
# repeated_file = guan.find_repeated_file_with_same_filename(directory='./', ignored_directory_with_words=[], ignored_file_with_words=[], num=1000)
# print(repeated_file)
def find_repeated_file_with_same_filename(directory='./', ignored_directory_with_words=[], ignored_file_with_words=[], num=1000):
import os
from collections import Counter
file_list = []
for root, dirs, files in os.walk(directory):
for i0 in range(len(files)):
file_list.append(files[i0])
for word in ignored_directory_with_words:
if word in root:
file_list.remove(files[i0])
for word in ignored_file_with_words:
if word in files[i0]:
try:
file_list.remove(files[i0])
except:
pass
count_file = Counter(file_list).most_common(num)
repeated_file = []
for item in count_file:
if item[1]>1:
repeated_file.append(item)
return repeated_file
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,41 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/26536
"""
def main():
# 如果子文件夹中所有文件的数量小于5输出路径。
count_file_in_sub_directory(directory='./', smaller_than_num=5)
# import guan
# guan.count_file_in_sub_directory(directory='./', smaller_than_num=5)
def count_file_in_sub_directory(directory='./', smaller_than_num=None):
import os
from collections import Counter
dirs_list = []
for root, dirs, files in os.walk(directory):
if dirs != []:
for i0 in range(len(dirs)):
dirs_list.append(root+'/'+dirs[i0])
for sub_dir in dirs_list:
file_list = []
for root, dirs, files in os.walk(sub_dir):
for i0 in range(len(files)):
file_list.append(files[i0])
count_file = len(file_list)
if smaller_than_num == None:
print(sub_dir)
print(count_file)
print()
else:
if count_file<smaller_than_num:
print(sub_dir)
print(count_file)
print()
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,48 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/29155
"""
import numpy as np
import matplotlib.pyplot as plt
def get_data(x_array, y_array):
z_matrix = np.zeros((y_array.shape[0], x_array.shape[0]))
j0 = -1
for x in x_array:
j0 += 1
i0 = -1
for y in y_array:
i0 += 1
z_matrix[i0, j0] = x**2+y**2
return z_matrix
x_array = np.linspace(-1, 1, 1000)
y_array = x_array
z_matrix = get_data(x_array, y_array) # 举例的数据
fix_value = 0.5 # 画这个值附近的等高线
precision = 0.01 # 选取该值附近的范围
# 方法一
x_array_new = []
y_array_new = []
for i0 in range(y_array.shape[0]):
for j0 in range(x_array.shape[0]):
if abs(z_matrix[i0, j0]-fix_value)<precision:
x_array_new.append(x_array[j0])
y_array_new.append(y_array[i0])
fig, ax = plt.subplots()
plt.plot(x_array_new, y_array_new, 'o')
ax.set_xlim(min(x_array), max(x_array))
ax.set_ylim(min(y_array), max(y_array))
plt.show()
# 方法二
for i0 in range(y_array.shape[0]):
for j0 in range(x_array.shape[0]):
if abs(z_matrix[i0, j0]-fix_value)>precision:
z_matrix[i0, j0] = None
fig, ax = plt.subplots()
ax.contourf(x_array,y_array,z_matrix)
plt.show()

View File

@@ -0,0 +1,8 @@
import numpy as np
def run(parameter_array):
for parameter in parameter_array:
print('hello world'+' '+str(parameter))
parameter_array_labeled_for_replacement = []
run(parameter_array_labeled_for_replacement)

View File

@@ -0,0 +1,7 @@
#!/bin/sh
#PBS -N task
#PBS -l nodes=1:ppn=1
#PBS -q bigmem
cd $PBS_O_WORKDIR
export OMP_NUM_THREADS=1
python a.py

View File

@@ -0,0 +1,56 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/29200
"""
import os
parameter_str_array = ['np.arange(1, 11, 1)', 'np.arange(11, 21, 1)']
index = 0
for parameter_str in parameter_str_array:
index += 1
# 以下处理代码文件
old_file = 'a.py'
new_file = 'a'+str(index)+'.py'
# 说明linux系统下复制用cpwindows系统下复制用copy
os.system('cp '+old_file+' '+new_file) # 复制python代码文件
with open(new_file, 'r') as f: # 读取
content = f.read()
old_str = 'parameter_array_labeled_for_replacement = []'
new_str = 'parameter_array_labeled_for_replacement = ' + parameter_str
content = content.replace(old_str, new_str)
# 如果程序需要将数据写入文件,除了需要替代参数,还需要替代文件名,方法和以上相同
with open('a'+str(index)+'.py', 'w') as f: # 写入
f.write(content)
# 以下处理任务上传文件
old_file = 'a.sh'
new_file = 'a'+str(index)+'.sh'
os.system('cp '+old_file+' '+new_file) # 复制任务调度系统的sh上传文件
with open(new_file, 'r') as f: # 读取
content = f.read()
old_str = 'python a.py'
new_str = 'python a'+str(index)+'.py'
content = content.replace(old_str, new_str)
old_str = 'task'
new_str = 'task_'+str(index)
content = content.replace(old_str, new_str)
with open('a'+str(index)+'.sh', 'w') as f: # 写入
f.write(content)
# 提交任务
os.system('qsub '+new_file)

View File

@@ -0,0 +1,32 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/34649
"""
import PyPDF2
# 创建一个空的PDF对象
output_pdf = PyPDF2.PdfWriter()
# 打开第一个PDF文件
with open('a.pdf', 'rb') as file1:
pdf1 = PyPDF2.PdfReader(file1)
# 将第一个PDF文件的所有页面添加到输出PDF对象中
for page in range(len(pdf1.pages)):
output_pdf.add_page(pdf1.pages[page])
# 打开第二个PDF文件
with open('b.pdf', 'rb') as file2:
pdf2 = PyPDF2.PdfReader(file2)
# 将第二个PDF文件的所有页面添加到输出PDF对象中
for page in range(len(pdf2.pages)):
output_pdf.add_page(pdf2.pages[page])
# 保存合并后的PDF文件
with open('combined_file.pdf', 'wb') as combined_file:
output_pdf.write(combined_file)
# import guan
# guan.combine_two_pdf_files(input_file_1='a.pdf', input_file_2='b.pdf', output_file='combined_file.pdf')