报错与解决 | OSError: [Errno 22] Invalid argument:

在尝试使用`pd.read_csv`读取CSV文件时,遇到了OSError,错误原因是文件路径包含的反斜杠未转义。通过将原始的Windows风格路径改用正斜杠,问题得到了解决。修复后的代码成功读取了位于'dataset/DEAM_Annotations/annotations/annotationsaveragedpersong/song_level'目录下的静态特性CSV文件。

在用pd.read_csv读取csv文件时,

代码如下:

DATASET_DIR = 'dataset\DEAM_Annotations\annotations\annotations averaged per song\song_level' 

def load_static_features():
    features_csv = os.path.join(DATASET_DIR,'static_annotations_averaged_songs_1_2058_revised.csv')
    static_features = pd.read_csv(features_csv,index_col=0)
    return static_features

load_static_features()

报错:

OSError: [Errno 22] Invalid argument: 'dataset\\DEAM_Annotations\x07nnotations\x07nnotations averaged per song\\song_level\\static_annotations_averaged_songs_1_2058_revised.csv'

原因是:地址没有转义
更改:
将报错代码

DATASET_DIR = 'dataset\DEAM_Annotations\annotations\annotations averaged per song\song_level' 

更改为:

DATASET_DIR = 'dataset/DEAM_Annotations/annotations/annotations averaged per song/song_level' 
谢谢补充信息! 您提到的错误: ``` OSError: [Errno 22] Invalid argument: ``` 是 Python 中常见的错误,通常发生在调用某些文件操作函数时,传入了不合法或不支持的参数。在您的 bad block 解析脚本中,这个错误很可能出现在 **文件读取** 或 **Excel 输出** 的环节。 --- ### ✅ 常见原因分析 1. **文件路径问题**: - 输入文件名或路径拼写错误(如包含非法字符)。 - 路径不存在或权限不足。 - 使用了未定义的变量作为文件名。 2. **Excel 写入问题**: - 使用 `pandas.DataFrame.to_excel()` 时,如果未安装 `openpyxl` 或 `xlsxwriter` 引擎会报错。 - 输出路径非法或目标文件被其他程序占用。 3. **正则表达式提取失败**: - 如果某一行中没有匹配到 `0x...` 格式的数据,`re.search(...).group()` 会抛出异常。 --- ### ✅ 修复建议 #### 1. 检查文件路径是否正确 ```python input_file = 'bad_block_log.txt' # 确保文件真实存在,路径正确 output_file = 'bad_block_info.xlsx' # 输出路径也需合法 ``` #### 2. 添加异常处理防止中断 ```python for line in lines: if 'erase bb' in line: try: hex_value = re.search(r'0x[0-9a-fA-F]+', line).group() # 后续解析 except AttributeError: print(f"未找到十六进制数据: {line.strip()}") continue except Exception as e: print(f"解析错误: {line.strip()},错误: {e}") continue ``` #### 3. 安装 Excel 写入依赖 确保安装了 `openpyxl`(用于 `.xlsx` 文件): ```bash pip install openpyxl pandas ``` #### 4. 完整修复后的代码示例 ```python import re import pandas as pd def parse_hex_data(hex_str): match = re.search(r'0x[0-9a-fA-F]+', hex_str) if not match: return None hex_value = match.group() value = int(hex_value, 16) byte0 = (value >> 24) & 0xFF byte1 = (value >> 16) & 0xFF byte2 = (value >> 8) & 0xFF byte3 = value & 0xFF ce = byte0 plane = byte1 block = (byte2 << 8) | byte3 return ce, plane, block input_file = 'bad_block_log.txt' output_file = 'bad_block_info.xlsx' data = [] with open(input_file, 'r', encoding='utf-8') as f: for line in f: if 'erase bb' in line: result = parse_hex_data(line) if result: data.append(result) df = pd.DataFrame(data, columns=['CE', 'Plane', 'Block']) df.to_excel(output_file, index=False) print(f"解析完成,结果已保存到 {output_file}") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值