Python基础-17

day16回顾:
迭代器和生成器
什么是迭代器
  iter(可迭代对象) 返回的对象是迭代器
  可以用next(迭代器) 访问可迭代对象
for 语句实质 while, next, iter的组合
生成器:
  两种:
    生成器函数
    生成器表达式
生成器函数内部必须要有yield语句
    def fx():
        yield 语句
yield 语句
   格式
      yield 表达式
   yield 返回的数据将传递给 next(it)
生成器表达式
  语法
    (x for x in 可迭代对象 if x > 0)
迭代工具函数:
  zip(iter1, iter2, ....)
  enumerate(iter, start=0)
enumerate 示例:
   L = [3, 9, 7, 5, 1, 5, 4, 8]
   for n, e in enumerate(L):
       print("索引:", n, 对应的值是: e)
字节串 bytes  字节数组 bytearray
   不可变量   --> 可变的
   tuple         list
   frozenset     set
   bytes         bytearray
b'hello'  # 字面值
bytes()                  bytearray()
bytes(整型可迭代对象)       bytearray(整型可迭代对象)
bytes(整数n)              bytearray(整数n)
bytes(字符串, encoding='utf-8') bytearray(字符串, encoding='utf-8')
字节串和字节数组的运算:
  + += * *=
  < <= >= > == !=
  in / not in
  索引 index /切片 slice
序列:
  str, list, tuple, bytes, bytearray

day17笔记:
bytearray 的方法:
   BA代表bytearray
   BA.clear()    清空字节数组
   BA.append(n)  追加一个字节(n为0~255的整数)
   BA.remove(value)  删除第1个出现的字节,如果没有出现,则触发ValueError错误
   BA.reverse()  字节的顺序反转
   BA.decode(encoding='utf-8')  将bytearray转换为字符串
   BA.find(sub[, start[, end]])  查找sub 子节数数组

文件:
  什么是文件
    文件是用于数据存储的单位
    文件通常用来长期存储设置
    文件中的数据是以字节为单位进行顺序存储的
  内存的读写速度快/ 磁盘的读写速度慢

文件的操作步骤:
   打开文件
   读写文件
   关闭文件
文件的打开函数 open
  open(file, mode='rt')  用于打开一个文件,返回此文件流对象,如果打开失败会触发IOError错误
文件的关闭方法
  F.close()  # 关闭文件,释放系统资源
示例见:
    file_open.py
文件操作分为两种类型的操作:
   文本文件操作
   二进制文件操作
文本文件模式:
   mode = 't'
   1. 默认文件中存储的内容为字符数据,以行为单位读取,采用系统默认的换行符进行分隔
   2. 对于文本文件的读写,需要用字符串(str) 进行读取和写入数据
各操作系统默认的换行符:
  Linux 换行符 '\n'
  Windows 换行符 '\r\n'
  旧的Macintosh 的换行符 '\r'
  新的Mac OS 换行符 '\n'
练习:
    将如下数据用文本编辑器sublime 写入到data.txt文件中
    数据如下:
      小张 13888888888
      小李 13999999999
      小赵 13666666666
    写程序读取数据,打印出姓名和电话号码,格式如下:
      姓名: 小张, 电话: 13888888888
练习:
  1. 写一个程序,读入任意行的文字信息,当输入空行时结束输入.
  将读入的字符串存于列表中,然后将列表里的内容写入的文件 input.txt 中
  2. 写一个程序, 从input.txt中读取之前输入的数据,存入列表中.再加上行号进行打印显示
     显示格式如下 :
        第1行: zzzzzzz
        第2行: xxxxxxx
  答案见:
    write_data.py
    read_data.py

二进制文件操作
  打开模式 : 'b'
  默认文件中存储的都是以字节为单位的二进制数据,通常有人为规定的格式,需要以字节为单位进行读写
  对二进制文件的读写,需要用字节串(bytes)进行操作
F.read(n) 方法
F.readline()
F.readlines()
  对于二进制文件,F.read()/F.readline返回字节串
  F.readlines() 返回字节串列表
  F.read(n)  n代表最大字节数
F.write(x)方法
  对于二进制文件,x必须为字节串

F.seek(offset, whence=0) 函数
  offset 偏移量:
      大于0的数代表向文件末尾方向移动
      小于0的数代表向文件头方向移动
  whence 相对位置
      0  代表从文件头开始偏移
      1  代表从当前位置开始偏移
      2  代表从文件尾开始偏移
示例见:
   seek.py
汉字编码:
  国标系列:
    GB18030 (2字节或4字节编码,共27533个)
        GBK (2字节编码,共21003个)
            GB2312 (2字节编码,共6763个汉字)
    (常用于Windows)
  国际标准:
      UNICODE16/UNICODE32  <<<--->>> UTF-8
      (常用于Linux / Mac OS X / IOS / Android)
      UTF-8(8-bit Unicode Transformation Format)
编码字符串:
  'gb2312'
  'gbk'
  'gb18030'
  'utf-8'
  'ascii'
  用于 encode和  decode方法中
编码注释:
  在源文件的第一行或第二行写入如下格式的内容
  # -*- coding:gbk -*-
  或
  # -*- coding:utf-8 -*-
  是告诉python3解释执行器当前文件的编码是什么


练习:
  1. 修改原来的学生管理系统的代码,将其为分模块
     建议:
       1. 把显示菜单放在一个模块内
       2. 把对学生的操作放在一个模块内
       3. 把主事件循环while True 选择输入放在一个模块内
  2. 在菜单上添加两个功能:
     | 9) 保存学生信息到文件(si.txt)  |
     | 10) 从文件中读取数据(si.txt)   |
     建议用逗号","分隔数据:
       # file: si.txt
       xiaozhang,21,98
       xiaoli,22,100
       ...

ann@ann:~$ dpkg -l | grep python3 ii libpython3-dev:amd64 3.12.3-0ubuntu2 amd64 header files and a static library for Python (default) ii libpython3-stdlib:amd64 3.12.3-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version) ii libpython3.10-minimal:amd64 3.10.4-3 amd64 Minimal subset of the Python language (version 3.10) ii libpython3.10-stdlib:amd64 3.10.4-3 amd64 Interactive high-level object-oriented language (standard library, version 3.10) ii libpython3.12-dev:amd64 3.12.3-1ubuntu0.7 amd64 Header files and a static library for Python (v3.12) ii libpython3.12-minimal:amd64 3.12.3-1ubuntu0.7 amd64 Minimal subset of the Python language (version 3.12) ii libpython3.12-stdlib:amd64 3.12.3-1ubuntu0.7 amd64 Interactive high-level object-oriented language (standard library, version 3.12) ii libpython3.12t64:amd64 3.12.3-1ubuntu0.7 amd64 Shared Python runtime library (version 3.12) ii python3 3.12.3-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version) ii python3-apport 2.28.1-0ubuntu3.7 all Python 3 library for Apport crash report handling ii python3-apt 2.7.7ubuntu4 amd64 Python 3 interface to libapt-pkg ii python3-aptdaemon 1.1.1+bzr982-0ubuntu44 all Python 3 module for the server and client of aptdaemon ii python3-aptdaemon.gtk3widgets 1.1.1+bzr982-0ubuntu44 all Python 3 GTK+ 3 widgets to run an aptdaemon client ii python3-attr 23.2.0-2 all Attributes without boilerplate (Python 3) ii python3-babel 2.10.3-3build1 all tools for internationalizing Python applications - Python 3.x ii python3-bcrypt 3.2.2-1build1 amd64 password hashing library for Python 3 ii python3-blinker 1.7.0-1 all Fast, simple object-to-object and broadcast signaling (Python3) ii python3-bpfcc 0.29.1+ds-1ubuntu7 all Python 3 wrappers for BPF Compiler Collection (BCC) ii python3-brlapi:amd64 6.6-4ubuntu5 amd64 Braille display access via BRLTTY - Python3 bindings ii python3-cairo 1.25.1-2build2 amd64 Python3 bindings for the Cairo vector graphics library ii python3-certifi 2023.11.17-1 all root certificates for validating SSL certs and verifying TLS hosts (python3) ii python3-cffi-backend:amd64 1.16.0-2build1 amd64 Foreign Function Interface for Python 3 calling C code - runtime ii python3-chardet 5.2.0+dfsg-1 all Universal Character Encoding Detector (Python3) ii python3-click 8.1.6-2 all Wrapper around optparse for command line utilities - Python 3.x ii python3-colorama 0.4.6-4 all Cross-platform colored terminal text in Python - Python 3.x ii python3-commandnotfound 23.04.0 all Python 3 bindings for command-not-found. ii python3-configobj 5.0.8-3 all simple but powerful config file reader and writer for Python 3 ii python3-cryptography 41.0.7-4ubuntu0.1 amd64 Python library exposing cryptographic recipes and primitives (Python 3) ii python3-cups:amd64 2.0.1-5build6 amd64 Python3 bindings for CUPS ii python3-cupshelpers 1.5.18-1ubuntu9 all Python utility modules around the CUPS printing system ii python3-dateutil 2.8.2-3ubuntu1 all powerful extensions to the standard Python 3 datetime module ii python3-dbus 1.3.2-5build3 amd64 simple interprocess messaging system (Python 3 interface) ii python3-debconf 1.5.86ubuntu1 all interact with debconf from Python 3 ii python3-debian 0.1.49ubuntu2 all Python 3 modules to work with Debian-related data formats ii python3-defer 1.0.6-2.1ubuntu1 all Small framework for asynchronous programming (Python 3) ii python3-dev 3.12.3-0ubuntu2 amd64 header files and a static library for Python (default) ii python3-distro 1.9.0-1 all Linux OS platform information API ii python3-distro-info 1.7build1 all information about distributions' releases (Python 3 module) ii python3-distupgrade 1:24.04.26 all manage release upgrades ii python3-fasteners 0.18-2 all provides useful locks - Python 3.x ii python3-gdbm:amd64 3.12.3-0ubuntu1 amd64 GNU dbm database support for Python 3.x ii python3-gi 3.48.2-1 amd64 Python 3 bindings for gobject-introspection libraries ii python3-httplib2 0.20.4-3 all comprehensive HTTP client library written for Python3 ii python3-ibus-1.0 1.5.29-2 all Intelligent Input Bus - introspection overrides for Python (Python 3) ii python3-idna 3.6-2ubuntu0.1 all Python IDNA2008 (RFC 5891) handling (Python 3) ii python3-jinja2 3.1.2-1ubuntu1.3 all small but fast and easy to use stand-alone template engine ii python3-json-pointer 2.0-0ubuntu1 all resolve JSON pointers - Python 3.x ii python3-jsonpatch 1.32-3 all library to apply JSON patches - Python 3.x ii python3-jsonschema 4.10.3-2ubuntu1 all An(other) implementation of JSON Schema (Draft 3, 4, 6, 7) ii python3-jwt 2.7.0-1 all Python 3 implementation of JSON Web Token ii python3-launchpadlib 1.11.0-6 all Launchpad web services client library (Python 3) ii python3-lazr.restfulclient 0.14.6-1 all client for lazr.restful-based web services (Python 3) ii python3-lazr.uri 1.0.6-3 all library for parsing, manipulating, and generating URIs ii python3-louis 3.29.0-1build1 all Python bindings for liblouis ii python3-mako 1.3.2-1 all fast and lightweight templating for the Python 3 platform ii python3-markdown-it 3.0.0-2 all Python port of markdown-it and some its associated plugins ii python3-markupsafe 2.1.5-1build2 amd64 HTML/XHTML/XML string library ii python3-mdurl 0.1.2-1 all Python port of the JavaScript mdurl package rF python3-minimal 3.12.3-0ubuntu2 amd64 minimal subset of the Python language (default python3 version) ii python3-monotonic 1.6-2 all implementation of time.monotonic() - Python 3.x ii python3-nacl 1.5.0-4build1 amd64 Python bindings to libsodium (Python 3) ii python3-netaddr 0.8.0-2ubuntu1 all manipulation of various common network address notations (Python 3) ii python3-netifaces:amd64 0.11.0-2build3 amd64 portable network interface information - Python 3.x ii python3-netplan 1.1.2-2~ubuntu24.04.1 amd64 Declarative network configuration Python bindings ii python3-oauthlib 3.2.2-1 all generic, spec-compliant implementation of OAuth for Python3 ii python3-olefile 0.46-3 all Python module to read/write MS OLE2 files ii python3-paramiko 2.12.0-2ubuntu4.1 all Make ssh v2 connections (Python 3) ii python3-pexpect 4.9-2 all Python 3 module for automating interactive applications ii python3-pil:amd64 10.2.0-1ubuntu1 amd64 Python Imaging Library (Python3) ii python3-pip 24.0+dfsg-1ubuntu1.2 all Python package installer ii python3-pip-whl 24.0+dfsg-1ubuntu1.2 all Python package installer (pip wheel) ii python3-pkg-resources 68.1.2-2ubuntu1.2 all Package Discovery and Resource Access using pkg_resources ii python3-problem-report 2.28.1-0ubuntu3.7 all Python 3 library to handle problem reports ii python3-ptyprocess 0.7.0-5 all Run a subprocess in a pseudo terminal from Python 3 ii python3-pygments 2.17.2+dfsg-1 all syntax highlighting package written in Python 3 ii python3-pyparsing 3.1.1-1 all alternative to creating and executing simple grammars - Python 3.x ii python3-pyrsistent:amd64 0.20.0-1build2 amd64 persistent/functional/immutable data structures for Python ii python3-requests 2.31.0+dfsg-1ubuntu1.1 all elegant and simple HTTP library for Python3, built for human beings ii python3-rich 13.7.1-1 all render rich text, tables, progress bars, syntax highlighting, markdown and more ii python3-serial 3.5-2 all pyserial - module encapsulating access for the serial port ii python3-setuptools 68.1.2-2ubuntu1.2 all Python3 Distutils Enhancements ii python3-setuptools-whl 68.1.2-2ubuntu1.2 all Python Distutils Enhancements (wheel package) ii python3-six 1.16.0-4 all Python 2 and 3 compatibility library ii python3-software-properties 0.99.49.2 all manage the repositories that you install software from ii python3-speechd 0.12.0~rc2-2build3 all Python interface to Speech Dispatcher ii python3-sss 2.9.4-1.1ubuntu6.2 amd64 Python3 module for the System Security Services Daemon ii python3-systemd 235-1build4 amd64 Python 3 bindings for systemd ii python3-typing-extensions 4.10.0-1 all Backported and Experimental Type Hints for Python ii python3-tz 2024.1-2 all Python3 version of the Olson timezone database ii python3-uno 4:24.2.7-0ubuntu0.24.04.4 amd64 Python-UNO bridge ii python3-update-manager 1:24.04.12 all Python 3.x module for update-manager ii python3-urllib3 2.0.7-1ubuntu0.2 all HTTP library with thread-safe connection pooling for Python3 ii python3-wadllib 1.3.6-5 all Python 3 library for navigating WADL files ii python3-wheel 0.42.0-2 all built-package format for Python ii python3-xdg 0.28-2 all Python 3 library to access freedesktop.org standards ii python3-xkit 0.5.0ubuntu6 all library for the manipulation of xorg.conf files (Python 3) ii python3-yaml 6.0.1-2build2 amd64 YAML parser and emitter for Python3 ii python3.10-minimal 3.10.4-3 amd64 Minimal subset of the Python language (version 3.10) ii python3.12 3.12.3-1ubuntu0.7 amd64 Interactive high-level object-oriented language (version 3.12) ii python3.12-dev 3.12.3-1ubuntu0.7 amd64 Header files and a static library for Python (v3.12) ii python3.12-minimal 3.12.3-1ubuntu0.7 amd64 Minimal subset of the Python language (version 3.12) ii python3.12-venv 3.12.3-1ubuntu0.7 amd64 Interactive high-level object-oriented language (pyvenv binary, version 3.12)
最新发布
07-09
<think>我们正在处理一个dpkg错误,具体是在处理ubuntu-drivers-common包时,预删除脚本(prerm)和安装后脚本(postinst)中分别调用了`py3clean`和`py3compile`,但系统找不到这两个命令,导致错误退出状态127(命令未找到)。 根据引用[2]和引用[3],这个问题通常是因为`python3-minimal`包没有正确安装或损坏,导致`py3clean`和`py3compile`这两个脚本不可用。这两个工具由`python3-minimal`提供,用于清理和编译Python3的字节码缓存。 解决步骤: 1. **尝试重新安装`python3-minimal`包**:这是最直接的解决方法,因为`py3clean`和`py3compile`由这个包提供。使用命令: ```bash sudo apt install --reinstall python3-minimal ``` 如果这个命令执行过程中遇到依赖问题,可以尝试先修复损坏的包: ```bash sudo apt --fix-broken install ``` 2. **如果上述步骤不能解决问题,尝试重新安装`python3`和`python3-apt`**:因为错误信息中涉及到`python3-apt`(引用[1])以及`ubuntu-drivers-common`可能依赖的Python环境,我们可以扩展重新安装的包范围: ```bash sudo apt install --reinstall python3 python3-minimal python3-apt ``` 3. **清理并重新配置dpkg状态**:如果重新安装Python相关包后问题仍然存在,可以尝试清理dpkg的缓存和状态文件,然后重新配置: ```bash sudo dpkg --configure -a sudo apt update sudo apt upgrade ``` 4. **手动创建符号链接(备选)**:在极少数情况下,可能`py3clean`和`py3compile`的符号链接丢失。我们可以检查它们是否存在,并手动创建: ```bash # 检查文件是否存在 ls /usr/share/python3/py3clean.py ls /usr/share/python3/py3compile.py # 如果存在,创建符号链接到/usr/bin sudo ln -s /usr/share/python3/py3clean.py /usr/bin/py3clean sudo ln -s /usr/share/python3/py3compile.py /usr/bin/py3compile ``` 注意:在Ubuntu 22.04中,这两个工具通常位于`/usr/bin/`下,由`python3-minimal`包安装。如果重新安装包后它们应该被恢复,所以这一步通常不需要。 5. **最后,再次尝试安装有问题的包**: ```bash sudo apt install ubuntu-drivers-common ``` 注意:在执行上述操作时,确保系统是最新的,运行`sudo apt update`更新软件包列表。 引用[3]提供了直接重新安装`python3-minimal`的解决方案,这也是我们第一步推荐的操作。引用[2]解释了错误的原因,即prerm和postinst脚本调用了找不到的命令。 根据这些信息,我们给出以下具体步骤: ### 解决步骤详解: **步骤1:修复损坏的包(如果存在)** ```bash sudo apt --fix-broken install ``` **步骤2:重新安装python3-minimal** ```bash sudo apt install --reinstall python3-minimal ``` **步骤3:重新安装相关的Python包** ```bash sudo apt install --reinstall python3 python3-apt ``` **步骤4:清理dpkg的状态并更新** ```bash sudo dpkg --configure -a sudo apt update sudo apt upgrade ``` **步骤5:再次尝试安装或升级包** ```bash sudo apt install ubuntu-drivers-common ``` 如果上述步骤成功,问题应该被解决。 ### 注意事项: - 在执行这些命令时,可能需要管理员权限(sudo)。 - 如果系统中有多个Python版本,请确保默认的Python3指向正确的版本(通常通过`update-alternatives`配置)。 ### 相关问题: 1. 如何修复Ubuntu系统中其他与Python相关的dpkg错误? 2. 在修复Python环境时,如何避免破坏系统依赖? 3. 如果`apt --fix-broken install`失败,有哪些替代方法可以恢复系统包管理?</think>### 解决 dpkg 错误:py3clean 和 py3compile 未找到 #### 问题分析 错误信息显示在安装 `ubuntu-drivers-common` 包时,系统无法找到 `py3clean` 和 `py3compile` 命令: ```bash /var/lib/dpkg/info/ubuntu-drivers-common.prerm: 6: py3clean: not found ... /var/lib/dpkg/info/ubuntu-drivers-common.postinst: 23: py3compile: not found ``` 这些关键工具由 `python3-minimal` 包提供[^2][^3],主要用于: 1. `py3clean`:清理 Python 字节码缓存(`.pyc` 文件) 2. `py3compile`:编译 Python 字节码缓存 它们的缺失表明 Python 环境损坏或关键组件未正确安装。 --- ### 修复步骤 #### 1. 重新安装 Python 核心组件 ```bash sudo apt install --reinstall python3-minimal python3 python3-apt ``` 此命令将恢复 `py3clean` 和 `py3compile` 工具(位于 `/usr/bin/`)[^3]。 #### 2. 修复损坏的依赖关系 ```bash sudo apt --fix-broken install ``` 此操作会自动检测并修复包依赖问题[^1]。 #### 3. 强制完成中断的安装 ```bash sudo dpkg --configure -a sudo apt update sudo apt upgrade ``` #### 4. 手动验证工具恢复 检查工具是否已存在: ```bash ls /usr/bin/py3clean ls /usr/bin/py3compile ``` 正常应显示: ``` /usr/bin/py3clean /usr/bin/py3compile ``` #### 5. 重新尝试安装问题包 ```bash sudo apt install --reinstall ubuntu-drivers-common ``` --- ### 预防措施 1. **避免手动删除 Python 文件** 系统级 Python 组件(如 `python3-minimal`)由 APT 管理,手动删除会导致依赖链断裂。 2. **谨慎使用第三方 Python 安装** 若使用 Anaconda 或手动编译 Python(如引用[4]的 Python 3.7.4),避免替换系统默认的 `/usr/bin/python3`。 3. **关键组件保护列表** 以下包不应强制卸载: ```bash python3-minimal # 提供 py3clean/py3compile python3-apt # APT 的 Python 接口 python3-distutils # Python 工具链基础 ``` --- ### 技术说明 当执行 `sudo apt install package` 时: 1. **pre-removal 脚本** (`prerm`) 调用 `py3clean` 清理旧版本 2. **post-install 脚本** (`postinst`) 调用 `py3compile` 编译新版本 3. 若这些工具缺失,dpkg 会返回错误码 127(命令未找到)[^2] 修复后验证 Python 环境: ```bash $ python3 -c "import apt; print(apt.__version__)" # 应输出类似 2.6.0 的版本号 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值