N多技巧让你的Notebook起飞

本项目为AI全栈课程《Python从小白到精通》的配套补充,期望大家熟悉基本notebook开发环境后,掌握一些高阶的Notebook使用技巧,提高学习和工作效率。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

n多技巧让你的notebook起飞 - 创想鸟

1. Notebook VS IDE

Jupyter notebook(Jupyter lab)是aistudio实训平台默认的开发工具,同时也数据科学从业者最常使用的工具。相比vs code, pycharm等IDE(集成开发环境), notebook足够简单,可以让你把所有的精力放在数据挖掘探索和算法开发验证上。其代码结构是以单元格来组织和分割,一个单元格可以有一行或者若干行代码,完成一个单元格后可以立马运行查看中间结果并以及可视化,这种方式的方式的优点显而易见:

代码组织和运行方式非常符合数据科学工作者的思维习惯。可以一边做,然后根据运行的中间结果在思考下一步的操作。面对一个复杂问题时,往往需要多次分步骤尝试。而在IDE里面,每次要想知道中间结果需要打断点调试,每次都需要从头运行,没有notebook方便

配合markdown笔记,可以做出媲美教科书的效果

因为其易用和可扩展,现在很多大学都用来作上课的课件工具。另外你写完的notebook也可以发给别人(.ipynb文件),在Anaconda中可以直接运行,配合markdown可以完美再现你的思维过程! 本项目为AI全栈课程《Python从小白到精通》的配套补充,期望大家熟悉基本notebook开发环境后,掌握一些高阶的Notebook使用技巧,提高学习和工作效率。主要包括以下内容:

常用快捷键单个单元格输出多个结果单元格内执行shell脚本执行常见的shell命令输出当前notebook环境中已经存在的所有变量以及值统计代码运行时间画图相关给for循环加上进度条其他

2. 常用快捷键

显示行号。notebook默认状态下是不显示行号的。在命令模式下按I键可以显示行号code和markdown转换。命令模式下,m键可以将code转成markdown, y键相反编辑模式下:shift+enter 运行当前单元,并且高亮显示下一单元,如果没有下一单元就新建一个单元编辑模式下:crtl+enter 运行当前单元编辑模式下:alt+enter 运行当前单元,并且插入一个新单元并高亮显示

同时可以点击帮助-》快捷键列表查看所有内置的快捷键

N多技巧让你的Notebook起飞 - 创想鸟

3. 单个单元格输出多个结果

Notebook正常情况下,只有最后一行的代码的结果会输出, 如下我们读取一个文件到df中,写了df.shape, df.columns和df.head,只有最后一行的df.head结果会输出,例如:

In [1]

import pandas as pddf = pd.read_csv('demo.csv')df.shape # 正常情况下,因为此代码不是该单元格最后一行,此结果不会输出df.columns # 正常情况下,因为此代码不是该单元格最后一行,此结果不会输出df.head() # 只会输出该代码的结果
  EQP_ID MODEL_Type  CURR_TEMPERATURE0    RS4  QMO_2DCP1              32.91    RS4  QMO_2DCP1              32.42    RS4  QMO_2DCP1              33.03    RS4  QMO_2DCP1              32.94    RS4  QMO_2DCP1              32.9

In [2]

# 如果想把其他有结果也输出,只要增加一个单元格运行下面两句代码即可:"""from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all""""
'nfrom IPython.core.interactiveshell import InteractiveShell nInteractiveShell.ast_node_interactivity = "all"n'

In [4]

# 尝试一个单元格多个输出from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all"df.head()df.tail()df.shapedf['EQP_ID'].value_counts()
  EQP_ID MODEL_Type  CURR_TEMPERATURE0    RS4  QMO_2DCP1              32.91    RS4  QMO_2DCP1              32.42    RS4  QMO_2DCP1              33.03    RS4  QMO_2DCP1              32.94    RS4  QMO_2DCP1              32.9
    EQP_ID MODEL_Type  CURR_TEMPERATURE377    A6L  QMO_2DCP1             174.2378    A6L  QMO_2DCP1             171.6379    A6L  QMO_2DCP1             169.2380    A6L  QMO_2DCP1             166.8381    A6L  QMO_2DCP1             164.5
(382, 3)
A6L    132RS6    111Q5L     98RS4     41Name: EQP_ID, dtype: int64

4. notebook执行shell命令

很多时候别人开发的脚本是以.py文件形式保存的,这样的脚本一般需要在终端或者IDE环境中执行其实用notebook也完全没问题。只要把终端执行的命令前加个” ! “号即可举例: 下面我们写一个脚本demo.py输出当前的工作环境目录以及该目录下的所有文件,改文件位于当前的环境下:In [5]

# 先使用cat命令查看,在notebook中执行只要在命令前加!即可print("demo脚本内容如下:")!cat demo.py
demo脚本内容如下:print("this is a demo")print('------' * 10)import osprint('当前的目录为:')print(os.getcwd())print('------' * 10)print('当前目录下的文件:')print(os.listdir())print('------' * 10)

In [6]

# 使用!python命令执行该脚本!python demo.py
this is a demo------------------------------------------------------------当前的目录为:/home/aistudio------------------------------------------------------------当前目录下的文件:['data', 'demo.py', '.data', 'demo.csv', '.node.started', '.ipython', '.systemlogs', '.jupyter', '.cache', '.yarn', '.aistudiofs.download.success', '.codelab-jupyter.log', '.bash_history', '.ipynb_checkpoints', '.local', '.bashrc', '.aistudiofs', 'machine.csv', 'main.ipynb', '.conda', '.vscode.log', '.python_history', '.bash_logout', '.viminfo', '.virtual_documents', '.ssh', '.aistudiofs.success', '.homedata.success', '.dataset.download', '.pip', '.npm', '.profile', '.config', '.webide']------------------------------------------------------------

由此我们知道只要在命令前加入!即可执行shell命令,因而在Linux命令行中常用的pwd, ls等命令均可以使用该功能更长使用的一个场景是直接在notebook中安装第三方库,直接使用在单元格内执行: !pip install you-package==version即可In [7]

!pwd # 查看当前目录!ls # 显示当前目录下得文件和目录
/home/aistudiodata  demo.csvdemo.py  machine.csv  main.ipynb

In [ ]

# 直接在单元格内使用pip命令安装相关的库,不需要切换到终端去安装!pip install pandas

!注意: 上面的执行shell命令中,很多命令只能在linux环境中执行,例如pwd,ls等,如果notebook是运行在windows操作系统中,这些命令会实效。但是将!改成%即可在windows环境中执行

5. 常用的shell命令

通过上面得介绍可以发现在notebook中可以方便的执行shell命令,熟练使用可以省去和终端来回切换,提高工作效率。 下面介绍一些在开发中高频使用的shell命令。

5.1 切换目录 %cd

这个有点特殊,在指令cd前加“%”,而不是“!”号。 这点需要注意

In [9]

!pwd # 显示当前目录# 切换目录,可以使用相对路径或绝对路径。推荐使用绝对路径%cd /home/aistudio/work !pwd # 显示切换之后的目录
/home/aistudio[Errno 2] No such file or directory: '/home/aistudio/work'/home/aistudio/home/aistudio

5.2 重定向

在终端中,重定向即将指令原本在显示在终端中的输出追加或者输出到指定文件中进行持久化,便于后面的分析。 这个在一些日志或者输出信息比较多得时候非常有用。重定向有两种操作符:

讯飞星火 讯飞星火

科大讯飞推出的多功能AI智能助手

讯飞星火 120 查看详情 讯飞星火 “>” 重定向操作符, 后面跟随文件的名称。如果当前目录下存在同名文件,会覆盖。“>>” 追加>>重定向操作符。不覆盖,进行追加In [10]

# 查看当前系统进程信息!ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDaistudio       1  0.0  0.0   4528   728 ?        Ss   10:07   0:00 /bin/sh -c /oaistudio       7  0.0  0.0  13312  3352 ?        S    10:07   0:00 /bin/bash /oproot          33  0.0  0.0  65536  3152 ?        Ss   10:07   0:00 /usr/sbin/sshaistudio      44  0.0  0.0  13324  3428 ?        S    10:07   0:00 bash /opt/conaistudio      46  1.0  0.0 41645240 147244 ?     Sl   10:07   2:40 /opt/conda/enaistudio     100  0.0  0.0   4528   788 ?        S    10:07   0:00 /bin/sh -c plaistudio     101  1.7  0.0 5758164 89156 ?       Sl   10:07   4:17 /opt/conda/enaistudio     130  0.0  0.0  26236 11184 ?        S    10:07   0:00 /opt/conda/enaistudio     131  0.0  0.0 225112 47484 ?        Sl   10:07   0:01 /opt/conda/enaistudio     138  1.2  0.0 152228 48060 ?        Sl   10:07   3:06 /opt/conda/enaistudio     142  1.2  0.0 152228 48120 ?        Sl   10:07   3:07 /opt/conda/enaistudio     264  1.7  0.0 3132680 224776 ?      Sl   10:08   4:18 /opt/conda/enaistudio     269  0.2  0.1 658804 345120 ?       Sl   10:08   0:40 /opt/conda/enaistudio     271  0.0  0.0  52864 26952 ?        S    10:08   0:01 /opt/conda/enaistudio     273  0.0  0.0  42996 24368 ?        S    10:08   0:00 /opt/conda/enaistudio     275  0.0  0.0 171708 49880 ?        Sl   10:08   0:06 /opt/conda/enaistudio   26729  0.0  0.0  42280 24256 ?        S    14:02   0:00 /opt/conda/enaistudio   26787  0.1  0.0 2889464 93768 ?       Sl   14:02   0:01 /opt/conda/enaistudio   27558  0.6  0.0 3098712 103336 ?      Ssl  14:07   0:02 /opt/conda/enaistudio   28175  0.0  0.0  37852  3404 pts/0    Rs+  14:13   0:00 ps aux

In [11]

%cd /home/aistudio/!ps aux > systemid.txt
/home/aistudio

可以看到使用重定向命令后,屏幕不在有输出。相应的在/home/aistudio/目录下回出现一个systemid.txt文件,内容和上面得一样

5.3 查看文件内容

主要有cat, head, tail等命令。这些在深度学习项目中查看一些标注文件会用得比较多。通过查看一个标注文件得前5行可以大概了解文件和标签的结构。 这里举例使用head查看一个文件得前n行。其他命令可以自行尝试。

In [12]

%cd /home/aistudio/!head -5 systemid.txt
/home/aistudioUSER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDaistudio       1  0.0  0.0   4528   728 ?        Ss   10:07   0:00 /bin/sh -c /opt/conda/include/container-start.shaistudio       7  0.0  0.0  13312  3352 ?        S    10:07   0:00 /bin/bash /opt/conda/include/container-start.shroot          33  0.0  0.0  65536  3152 ?        Ss   10:07   0:00 /usr/sbin/sshdaistudio      44  0.0  0.0  13324  3428 ?        S    10:07   0:00 bash /opt/conda/envs/webide/bin/kernel_seperation_start.sh

5.4 tree命令查看一个目录的结构

可以指定 -L n用于显示目录的层级。 另外还有cp, mv, rm等文件的拷贝删除等操作。这里不在赘述。

In [13]

!tree -L 2 /home/aistudio/
/home/aistudio/├── data├── demo.csv├── demo.py├── machine.csv├── main.ipynb└── systemid.txt1 directory, 5 files

6. 查看当前notebook中的所有变量和变量值

在MATLAB中,直接有一个窗口可以显示当前所有的变量及其相应的值,这个功能非常强大,Anaconda中Spyder也有类似的功能。 其实notebook也可以,直接使用%who和%whos魔法命令即可。其中:

%who会输出当前notebook中已经存在的变量%whos除了输出变量外,变量的类型以及当前值也会显示In [14]

# 先创建一些变量a, b, c = 10, 20.5, 'zhangsan'd = {'Name' : 'PaddlePaddle', 'Age': 18}e = ['cat', 'dog']

In [15]

# 显示当前环境中的所有变量%who
InteractiveShell a b c d df e pd

In [16]

# 显示当前环境中的所有变量、类型和值%whos
Variable           Type             Data/Info---------------------------------------------InteractiveShell   MetaHasTraits    <class 'IPython.core.inteeshell.InteractiveShell'>a                  int              10b                  float            20.5c                  str              zhangsand                  dict             n=2df                 DataFrame            EQP_ID MODEL_Type  CUnn[382 rows x 3 columns]e                  list             n=2pd                 module           <module 'pandas' from '/oages/pandas/__init__.py'>

这个功能在notebook内容比较多的时候比较有用,可以随时通过此命令查看当前环境下的变量而不用向上查找代码

7. 运行时间统计

这个比较常用。主要有time,和timeit两个魔法命令,在结合行模式和单元格模式就有4种用法,具体如下:

%time:在行模式下,统计代码运行一次所花费的时间%%time:在单元模式下,统计整个单元格内的代码运行一次所花费的时间%timeit:在行模式下,执行代码块若干次,统计出平均时间。结果以mean+/-std的形式给出%%timeit:在单元模式下,执行代码块若干次,统计出平均时间。结果以mean+/-std的形式给出

所以time只统计执行一次的时间;而timeit会反复执行很多次统计平均时间,这个比只执行一次要准确一点

In [17]

%time [i for i in range(100) if i%7 == 0]
CPU times: user 0 ns, sys: 10 µs, total: 10 µsWall time: 14.1 µs
[0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98]

上面的代码使用列表解析式输出100以内可以被7整除的整数,并使用time统计代码运行时间如果改成timeit,则会执行多次,统计平均时间和标准差In [18]

%timeit [i for i in range(100) if i%7 == 0]
4.75 µs ± 40.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

将一个%改成2个%%后,变成单元格模式,即可以统计整个单元格内的代码运行时间我们通过使用for循环和矩阵方式实现矩阵加法来举例,看看运行效率In [ ]

# 先定义两个二维数组import numpy as npm = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]n = [[2, 2, 2], [3, 3, 3], [4, 4, 4]]m_, n_ = np.array(m), np.array(n)m_,n_m_.shape

使用for-loop实现矩阵相加,并统计时间In [ ]

%%timeitdef array_add_forloop():    res = np.zeros((3,3))    for row in range(m_.shape[0]):        for col in range(m_.shape[1]):            res[row,col] = int(m_[row,col] + n_[row,col])    return resarray_add_forloop()

使用矩阵方式实现矩阵加法In [ ]

%%timeitdef array_add_matrix():    return m_+ n_array_add_matrix()

通过时间统计可以看到,使用numpy中的array实现矩阵相加,效率是for循环的10倍以上!

8. 在notebook中绘图

在Notebook中,matplotlib是最常用的绘图库,并且Notebook中有相应的魔法命令用于辅助绘图功能:

%matplotlib inline:使用这条魔法命令后,不需要显示地调用pyplot.show()即可自动显示图片可以在plt.plot函数后面添加一个“;”这样只输出所需要的图形。

下面举例说明

In [ ]

# %matplotlib inline省略plt.show, 可以加在最前面的单元格,全局有效import numpy as npimport matplotlib.pyplot as plt%matplotlib inlinex = np.linspace(-10,10,100)y = np.sin(x)plt.plot(x, y)

In [ ]

# 加上";"抑制其他输出import numpy as npimport matplotlib.pyplot as plt%matplotlib inlinex = np.linspace(-10,10,100)y = np.sin(x)plt.plot(x, y);

9. 增加进度条

使用tqdm这个工具给循环语句增加个进度条可视化插件,显示循环体进行到那个阶段了这个功能在处理耗时比较大的循环的时候是非常必要的,效果如下:In [ ]

from tqdm import tqdmimport timefor i in tqdm(range(100)):    # 此处写业务逻辑    time.sleep(0.1)

10、其他技巧

numpy中设定显示的小数点位数: 使用np.set_printoptions方法pandas中显示所有的行和列

10.1 设置numpy显示精度

In [20]

# 默认情况下np会显示小数点后8位import numpy as npnp.random.rand(2,2)
array([[0.69865144, 0.55332125],       [0.97711927, 0.15941402]])

In [21]

# 设置成显示2位, 设置后全局有效import numpy as npnp.set_printoptions(precision=2)np.random.rand(2,2)
array([[0.45, 0.68],       [0.01, 0.2 ]])

10.2 pandas显示所有的列

在notebook中,当文件的行和列过多时,pandas默认不显示所有的信息。此时可以使用如下,命令显示:

显示所有行: pd.set_option(‘display.max_rows’, None)显示所有列:pd.set_option(‘display.max_columns’, None)In [24]

%cd /home/aistudio/import pandas as pd df_machine = pd.read_csv("machine.csv")df_machine
/home/aistudio
           Time  Step_Number wafer_names   fault_name   lotid  lot_id         11.9460            4  l29011.txm  calibration  lot011  lot011   1       13.0280            4  l29011.txm  calibration  lot011  lot011   2       14.0490            4  l29011.txm  calibration  lot011  lot011   3       15.1329            4  l29011.txm  calibration  lot011  lot011   4       16.1390            4  l29011.txm  calibration  lot011  lot011   ...         ...          ...         ...          ...     ...     ...   10765  104.6880            5  l33431.txm  calibration  lot061  lot061   10766  105.6870            5  l33431.txm  calibration  lot061  lot061   10767  106.7190            5  l33431.txm  calibration  lot061  lot061   10768  107.7500            5  l33431.txm  calibration  lot061  lot061   10769  108.7660            5  l33431.txm  calibration  lot061  lot061           recipe  151821807  151820951  151821601  151821602  151821603        recipe1          4        751        753        132          0   1      recipe1          4        751        753        134          0   2      recipe1          4        751        755        134          0   3      recipe1          4        751        753        133          0   4      recipe1          4        751        754        132          0   ...        ...        ...        ...        ...        ...        ...   10765  recipe1          5        752        753        131          0   10766  recipe1          5        752        754        134          0   10767  recipe1          5        752        754        132          0   10768  recipe1          5        752        754        132          0   10769  recipe1          5        751        752        132          0          151821604  151822195  151822196  151822197  151822198  151822215              626        100       1227       9408       9019       -362   1            620         99       1229       9431       9029      -1455   2            599        102       1221       9389       9114      -1056   3            586        100       1201       9445       9031       -587   4            587        102       1182       9456       9043       -124   ...          ...        ...        ...        ...        ...        ...   10765        538        102       1226       9365       8973       1161   10766        534        102       1227       9426       8934        606   10767        531        102       1227       9357       8937       1249   10768        534        100       1227       9434       8920       1155   10769        529        101       1226       9346       8990        799          151822252  151822253  151822254  151822255  151821769  151821770               26      16599      20028       -296      16848        360   1             26      16568      20042       -676      16796        350   2             25      16442      20146       -291      16512        344   3             25      16960      20148       -262      17020        352   4             25      16564      20226       -547      16440        346   ...          ...        ...        ...        ...        ...        ...   10765         28      16920      19110          7      16464        346   10766         28      16640      18982        134      16658        346   10767         28      16593      19056        -34      16714        348   10768         28      16522      19046        139      16560        353   10769         28      16815      19114         72      16630        355          151821788  151821789  151821797  0              0      27594         49  1              0      27440         49  2              0      27276         49  3              0      27330         50  4              0      27262         50  ...          ...        ...        ...  10765          0      28446         51  10766          0      28444         51  10767          0      28230         51  10768          0      28278         51  10769          0      28240         51  [10770 rows x 27 columns]

In [25]

# 这里举例显示所有的列,其他可以自行尝试pd.set_option('display.max_columns', None)df_machine.head()
      Time  Step_Number wafer_names   fault_name   lotid  lot_id   recipe    11.9460            4  l29011.txm  calibration  lot011  lot011  recipe1   1  13.0280            4  l29011.txm  calibration  lot011  lot011  recipe1   2  14.0490            4  l29011.txm  calibration  lot011  lot011  recipe1   3  15.1329            4  l29011.txm  calibration  lot011  lot011  recipe1   4  16.1390            4  l29011.txm  calibration  lot011  lot011  recipe1      151821807  151820951  151821601  151821602  151821603  151821604            4        751        753        132          0        626   1          4        751        753        134          0        620   2          4        751        755        134          0        599   3          4        751        753        133          0        586   4          4        751        754        132          0        587      151822195  151822196  151822197  151822198  151822215  151822252          100       1227       9408       9019       -362         26   1         99       1229       9431       9029      -1455         26   2        102       1221       9389       9114      -1056         25   3        100       1201       9445       9031       -587         25   4        102       1182       9456       9043       -124         25      151822253  151822254  151822255  151821769  151821770  151821788        16599      20028       -296      16848        360          0   1      16568      20042       -676      16796        350          0   2      16442      20146       -291      16512        344          0   3      16960      20148       -262      17020        352          0   4      16564      20226       -547      16440        346          0      151821789  151821797  0      27594         49  1      27440         49  2      27276         49  3      27330         50  4      27262         50

In [ ]


以上就是N多技巧让你的Notebook起飞的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/319917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
edge浏览器怎么查看SSL证书的详细信息_edge浏览器网站安全证书查看教程
上一篇 2025年11月5日 09:28:24
如何让composer在更新时自动移除不再需要的依赖?
下一篇 2025年11月5日 09:28:27

相关推荐

  • composer require-dev和require有什么不同_Composer Require与Require-Dev区别解析

    require用于声明项目运行必需的依赖,如框架、数据库组件和第三方SDK,这些包会随项目部署到生产环境;2. require-dev用于声明仅在开发和测试阶段需要的工具,如PHPUnit、PHPStan、Faker等,不会默认部署到生产环境;3. 安装时composer install根据环境决定…

    2026年5月10日
    1000
  • Matplotlib 地图中多类型图例的创建与优化

    Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化

    本教程旨在解决matplotlib地图可视化中,如何在一个图例中同时展示颜色块(如区域分类)和自定义标记(如特定兴趣点)的问题。文章详细介绍了当传统`patch`对象无法正确显示标记时,如何利用`matplotlib.lines.line2d`创建标记图例句柄,并将其与颜色块图例句柄合并,从而生成一…

    2026年5月10日 用户投稿
    100
  • Golang JSON序列化:控制敏感字段暴露的最佳实践

    本教程探讨golang中如何高效控制结构体字段在json序列化时的可见性。当需要将包含敏感信息的结构体数组转换为json响应时,通过利用`encoding/json`包提供的结构体标签,特别是`json:”-“`,可以轻松实现对特定字段的忽略,从而避免敏感数据泄露,确保api…

    2026年5月10日
    000
  • 利用海象运算符简化条件赋值:Python教程与最佳实践

    本文旨在探讨Python中海象运算符(:=)在条件赋值场景下的应用。通过对比传统if/else语句与海象运算符,以及条件表达式,分析海象运算符在简化代码、提高可读性方面的优势与局限性。并通过具体示例,展示如何在列表推导式等场景下合理使用海象运算符,同时强调其潜在的复杂性及替代方案,帮助开发者更好地掌…

    2026年5月10日
    100
  • Debian syslog性能优化技巧有哪些

    提升Debian系统syslog (通常基于rsyslog)性能,关键在于精简配置和高效处理日志。以下策略能有效优化日志管理,提升系统整体性能: 精简配置,高效加载: 在rsyslog配置文件中,仅加载必要的输入、输出和解析模块。 使用全局指令设置日志级别和格式,避免不必要的处理。 自定义模板: 创…

    2026年5月10日
    000
  • 怎么在PHP代码中实现图片上传功能_PHP图片上传功能实现与安全处理教程

    首先创建含enctype的HTML表单,再用PHP接收文件,检查目录、移动临时文件,验证类型与大小,生成唯一文件名,并调整php.ini限制以确保上传成功。 如果您尝试在PHP项目中添加图片上传功能,但服务器无法正确接收或保存文件,则可能是由于表单配置、文件处理逻辑或安全限制的问题。以下是实现该功能…

    2026年5月10日
    100
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • c++中的SFINAE技术是什么_c++模板编程中的SFINAE原理与应用

    SFINAE 是“替换失败不是错误”的原则,指模板实例化时若参数替换导致错误,只要存在其他合法候选,编译器不报错而是继续重载决议。它用于条件启用模板、类型检测等场景,如通过 decltype 或 enable_if 控制函数重载,实现类型特征判断。尽管 C++20 引入 Concepts 简化了部分…

    2026年5月10日
    000
  • Go语言mgo查询构建:深入理解bson.M与日期范围查询的正确实践

    本文旨在解决go语言mgo库中构建复杂查询时,特别是涉及嵌套`bson.m`和日期范围筛选的常见错误。我们将深入剖析`bson.m`的类型特性,解释为何直接索引`interface{}`会导致“invalid operation”错误,并提供一种推荐的、结构清晰的代码重构方案,以确保查询条件能够正确…

    2026年5月10日
    100
  • vscode上怎么运行html_vscode上运行html步骤【指南】

    首先保存文件为.html格式,再通过浏览器或Live Server插件打开预览;推荐安装Live Server实现本地服务器运行与实时刷新,提升开发体验。 在 VS Code 上运行 HTML 文件并不需要复杂的配置,只需几个简单步骤即可预览页面效果。VS Code 本身是一个代码编辑器,不直接运行…

    2026年5月10日
    100
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    2026年5月10日
    100
  • Golang goroutine与channel调试技巧

    使用go run -race检测数据竞争,结合runtime.NumGoroutine监控协程数量,通过pprof分析阻塞调用栈,利用select超时避免永久阻塞,有效排查goroutine泄漏、死锁和数据竞争问题。 Go语言的goroutine和channel是并发编程的核心,但它们也带来了调试上…

    2026年5月10日
    000
  • 《魔兽世界》将于6月11日开启国服回归技术测试

    《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试

    《%ign%ignore_a_1%re_a_1%》官方宣布,将于6月11日开启国服回归技术测试,时间为7天,并称可以在6月内正式开服,玩家们可以访问官网下载战网客户端并预下载“巫妖王之怒”客户端,技术测试详情见下图。 WordAi WordAI是一个AI驱动的内容重写平台 53 查看详情 以上就是《…

    2026年5月10日 用户投稿
    200
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    100
  • 网站标题关键词更新后,搜索引擎为何仍显示旧标题?

    网站标题更新后,搜索引擎为何显示旧标题? 网站SEO优化中,站长常修改网站标题关键词,期望搜索结果显示自定义标题。然而,即使更新标签、meta keywords、meta description和结构化数据中的name属性后,搜索结果仍显示旧标题,这令人费解。本文将对此进行解释。 问题:站长修改了网…

    2026年5月10日
    100
  • 创建指定大小并填充特定数据的Golang文件教程

    本文将介绍如何使用Golang创建一个指定大小的文件,并用特定数据填充它。我们将使用 `os` 包提供的函数来创建和截断文件,从而实现快速生成大文件的目的。示例代码展示了如何创建一个10MB的文件,并将其填充为全零数据。掌握这些方法,可以方便地在例如日志系统或磁盘队列等场景中,预先创建测试文件或初始…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • 如何插入查询结果数据_SQL插入Select查询结果方法

    如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法

    使用INSERT INTO…SELECT语句可高效插入数据,通过NOT EXISTS、LEFT JOIN、MERGE语句或唯一约束避免重复;表结构不一致时可通过别名、类型转换、默认值或计算字段处理;结合存储过程可提升可维护性,支持参数化与动态SQL。 将查询结果数据插入到另一个表中,可以…

    2026年5月10日 用户投稿
    000

发表回复

登录后才能评论
关注微信