DataStructure_1.Introduction

本文介绍了数据的基本组成,如数据项、数据元素等,并详细解释了数据结构的概念,包括逻辑结构与物理结构的不同表现形式,如顺序存储、链接存储等。此外还探讨了抽象数据类型(ADT)的概念及其重要性。

1.1 数据{数值类型(整型、实型…),非数值类型(字符、声音、图像、视频…)}

1.2数据项组成—>数据元素(a.k.a记录)—组成—>数据对象组成—>数据

                                       

                                    

数据结构(相互之间存在一种或多种特定关系的数据元素的集合)

 

  

  

  

  • 1.3 数据结构

  

  

  

  

  

逻辑结构

  

使用示意图的时候,将每个数据元素看作结点,用圆圈表示

物理结构

  

  

  

集合结构

元素平等,唯一联系及共同属性是"同属一个集合",类比数学集合

  

顺序存储结构

将数据元素存放在地址连续的存储单元里面,且数据间的逻辑关系和物理关系是一致的,类比数组

  

线性结构

数据元素之间是一对一关系,类似二元关系中的反对称:a->b->c->d->e

  

链接存储结构

针对时常需要变化的结构(比如现实生活中排队时有人不排了,有人插队,这时就无法用顺序存储结构)。即把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的,也可以是不连续的

  

树形结构

类比图论

  

  

  

  

  

图形结构

类比图论

  

  

  

  

1.4 抽象数据类型(Abstract Data Type,ADT)

整型就是一个ADT,尽管可能在不同计算机上实现方法不一样,但由于其定义的数学特性相同,故在编程者看来他们都是相同的。故所谓"抽象"在于数据类型的数学抽象特性。且ADT还可以包括我们自己定义的数据类型。

<think>我们正在处理一个文件路径错误:FileNotFoundError: [Errno 2] No such file or directory: '../loaddata/patient.txt' 这个错误表示Python脚本在尝试打开文件'../loaddata/patient.txt'时,没有找到该文件或目录。 解决步骤: 1. 检查文件路径是否正确 - 相对路径`../loaddata/patient.txt`的含义是:当前脚本所在目录的上一级目录下的loaddata文件夹中的patient.txt文件。 - 例如,如果脚本位于`/project/scripts/main.py`,那么它会尝试访问`/project/loaddata/patient.txt`。 2. 确认当前工作目录 - 在Python中,相对路径是基于当前工作目录(Current Working Directory, CWD)的,而不是脚本所在目录。 - 使用以下代码可以打印当前工作目录: ```python import os print(os.getcwd()) ``` - 如果当前工作目录不是脚本所在目录,那么相对路径就会出错。 3. 解决方案: a) 更改文件路径为绝对路径 - 使用绝对路径可以避免相对路径的歧义。 - 例如:`/home/user/project/loaddata/patient.txt`(Linux)或`C:\\project\\loaddata\\patient.txt`(Windows) b) 修改相对路径 - 根据当前工作目录调整相对路径。比如,如果当前工作目录是`/project`,那么应该使用`./loaddata/patient.txt`或`loaddata/patient.txt`。 c) 更改当前工作目录 - 在脚本中,可以使用`os.chdir()`将工作目录设置为脚本所在目录: ```python import os os.chdir(os.path.dirname(os.path.abspath(__file__))) ``` - 然后使用相对路径`../loaddata/patient.txt`(注意:如果脚本在`/project/scripts`中,那么`..`会指向`/project`,然后进入`project/loaddata`) d) 使用`__file__`构建绝对路径 - 更可靠的方法是使用脚本的`__file__`属性构建绝对路径: ```python import os script_dir = os.path.dirname(os.path.abspath(__file__)) # 脚本所在目录 parent_dir = os.path.dirname(script_dir) # 上一级目录 file_path = os.path.join(parent_dir, 'loaddata', 'patient.txt') ``` 4. 检查文件是否存在 - 在尝试打开文件之前,可以先检查文件是否存在: ```python if os.path.exists(file_path): # 打开文件 else: print(f"文件不存在: {file_path}") ``` 5. 检查文件名和权限 - 确保文件名拼写正确(包括大小写,因为Linux系统是大小写敏感的)。 - 确保程序有读取该文件的权限。 6. 示例代码: 假设脚本结构如下: project/ scripts/ main.py loaddata/ patient.txt 在main.py中,我们可以这样构建路径: ```python import os # 获取当前脚本的绝对路径所在目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 获取项目根目录(即scripts的父目录) project_root = os.path.dirname(script_dir) # 构建目标文件路径 file_path = os.path.join(project_root, 'loaddata', 'patient.txt') # 检查文件是否存在 if not os.path.exists(file_path): raise FileNotFoundError(f"文件不存在: {file_path}") # 打开文件 with open(file_path, 'r') as f: # 处理文件内容 data = f.read() ``` 7. 使用pathlib(Python 3.4+ 推荐) - 使用面向对象的路径处理方式: ```python from pathlib import Path # 当前脚本的绝对路径 script_path = Path(__file__).resolve() # 项目根目录 project_root = script_path.parent.parent # 目标文件 file_path = project_root / 'loaddata' / 'patient.txt' if not file_path.exists(): raise FileNotFoundError(f"文件不存在: {file_path}") with open(file_path, 'r') as f: data = f.read() ``` 8. 注意路径分隔符 - Windows使用反斜杠`\`,而Linux和macOS使用正斜杠`/`。使用`os.path.join`或`pathlib`可以自动处理。 根据以上步骤,用户可以根据自己的项目结构调整路径。 如果用户是在IDE中运行,有时工作目录会被设置为项目根目录,这时相对路径`loaddata/patient.txt`可能就足够了。但在命令行中运行脚本时,工作目录可能是任意位置,因此使用绝对路径构建方法更可靠。 引用说明: - 在文件操作中,路径错误是常见问题,需要根据实际环境调整[^2]。 - 使用`os.path`和`pathlib`可以增强代码的可移植性[^3]。</think>### Python FileNotFoundError: [Errno 2] 文件路径错误解决方案 当出现`FileNotFoundError: [Errno 2] No such file or directory: '../loaddata/patient.txt'`错误时,表示Python无法在指定路径找到文件。以下是系统性的解决方案: #### 1. 验证文件实际路径(关键步骤) ```python import os import pathlib # 获取当前脚本所在目录 script_dir = pathlib.Path(__file__).parent.resolve() print(f"脚本所在目录: {script_dir}") # 尝试构建目标路径 target_path = script_dir / "../loaddata/patient.txt" print(f"尝试访问路径: {target_path.resolve()}") # 检查路径是否存在 if not target_path.exists(): print("❌ 文件不存在,请检查路径") else: print("✅ 文件存在,权限检查中...") # 检查文件权限 if os.access(target_path, os.R_OK): print("✅ 有读取权限") else: print("❌ 无读取权限") ``` #### 2. 常见原因及解决方案 | 原因 | 解决方案 | 示例代码 | |------|---------|----------| | **相对路径错误** | 使用绝对路径或动态构建路径 | `path = os.path.join(os.path.dirname(__file__), '..', 'loaddata', 'patient.txt')` | | **文件不存在** | 检查文件位置和大小写 | `ls ../loaddata/` (Linux) 或 `dir ..\loaddata\` (Windows) | | **工作目录不同** | 显式设置工作目录 | `os.chdir(os.path.dirname(os.path.abspath(__file__)))` | | **权限问题** | 检查文件权限 | `os.chmod(file_path, 0o644)` (Linux/Mac) | | **路径分隔符问题** | 使用`os.path.join`处理 | `path = os.path.join('..', 'loaddata', 'patient.txt')` | | **虚拟环境路径** | 确保路径在虚拟环境中有效 | 在激活的虚拟环境中运行脚本 | #### 3. 推荐使用 pathlib(Python 3.4+) ```python from pathlib import Path # 安全构建路径 base_dir = Path(__file__).parent.parent # 上两级目录 data_file = base_dir / 'loaddata' / 'patient.txt' # 带错误处理的文件读取 try: with open(data_file, 'r') as f: content = f.read() print(f"成功读取 {len(content)} 字节数据") except FileNotFoundError: print(f"错误: 文件不存在于 {data_file.absolute()}") except PermissionError: print(f"错误: 无权限访问 {data_file}") ``` #### 4. 跨平台路径处理技巧 ```python import sys import platform # 根据操作系统处理路径差异 if platform.system() == 'Windows': base_path = r"C:\project\data" else: base_path = "/var/project/data" # 使用原始字符串处理Windows路径 file_path = r"..\loaddata\patient.txt" if sys.platform == 'win32' else "../loaddata/patient.txt" ``` #### 5. 调试建议 1. 打印当前工作目录:`print("当前工作目录:", os.getcwd())` 2. 列出目录内容:`print("目录内容:", os.listdir('..'))` 3. 检查文件属性:`print("文件状态:", os.stat(target_path))` 4. 使用路径存在性检查:`Path('../loaddata').is_dir()` > **重要提示**:在Docker或云环境中运行时,确保文件已正确挂载到容器中[^2]。对于数据库同步操作,读操作应选择负载较轻的数据库节点[^2]。 #### 6. 路径验证流程图 ```mermaid graph TD A[遇到FileNotFoundError] --> B{文件是否存在?} B -->|是| C{有读取权限?} B -->|否| D[检查路径拼写和大小写] C -->|是| E[检查文件是否被占用] C -->|否| F[修改文件权限] D --> G[使用绝对路径重试] E --> H[关闭占用进程] F --> I[chmod或ACL设置] G --> J[验证路径构建逻辑] ``` #### 7. 预防措施 1. 在项目根目录创建路径配置文件 ```python # config/paths.py from pathlib import Path PROJECT_ROOT = Path(__file__).parent.parent DATA_DIR = PROJECT_ROOT / 'loaddata' PATIENT_FILE = DATA_DIR / 'patient.txt' ``` 2. 在Dockerfile中明确声明数据卷 ```dockerfile VOLUME /app/loaddata COPY ./loaddata /app/loaddata ``` 3. 使用环境变量配置路径 ```python import os file_path = os.getenv('PATIENT_DATA_PATH', '../loaddata/patient.txt') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值