Jupyter Lab可运行的Python代码在命令行无报错却无法执行求助
命令行执行Python脚本无反应但Jupyter正常的问题排查
以下是你的代码:
import pandas as pd import os def list_files(folder_path): files = [] for file_name in os.listdir(folder_path): file_path = os.path.join(folder_path, file_name) if os.path.isfile(file_path): files.append(file_name) return files file_path = input("Enter the output files path") folder_path = input("Enter the input files path") file_list = pd.Series(list_files(folder_path)) csv_data_source = [] for files in file_list: dfinv = pd.read_excel(folder_path + files,sheet_name="Import") dfscn = pd.read_excel(folder_path + files,sheet_name="ScannedPartNumbers") partmaster = pd.read_csv('part_master.csv',encoding='latin1',low_memory=False) dfscn = dfscn[dfscn['ScannedPartNumber'].str.len() != 71] dffnl = pd.DataFrame(columns = ['InvNo','PartNo','ScnSumQty','ScnAvgMRP','InvAvgMRP','InvGST','MRPDiff','TotDiff']) dfscn['scnpartno'] = dfscn['ScannedPartNumber'].str.slice(start=30,stop=48) dfscn['scnpartqty'] = dfscn['ScannedPartNumber'].str.slice(start=49,stop=55) dfscn['scnpartmrp'] = dfscn['ScannedPartNumber'].str.slice(start=56,stop=66) dfscn['scnpartno'] = dfscn['scnpartno'].str.strip() #dfscn['scnpartno'] = pd.to_char(dfscn['scnpartno']) dfscn['scnpartqty'] = pd.to_numeric(dfscn['scnpartqty']) dfscn['scnpartmrp'] = pd.to_numeric(dfscn['scnpartmrp']) dfinv['Qty'] = pd.to_numeric(dfinv['Qty']) dfinv['MRP'] = pd.to_numeric(dfinv['MRP']) unpano = pd.Series(dfscn['scnpartno'].unique()) for pnum in unpano: if (dfscn.loc[dfscn['scnpartno'] == pnum,'scnpartmrp'].mean()) != (dfinv.loc[dfinv['Part #'] == pnum,'MRP'].mean()): dffnl.loc[pnum,'InvNo'] = files dffnl.loc[pnum,'PartNo'] = pnum dffnl.loc[pnum,'ScnSumQty'] = dfscn.loc[dfscn['scnpartno'] == pnum,'scnpartqty'].sum() dffnl.loc[pnum,'ScnAvgMRP'] = dfscn.loc[dfscn['scnpartno'] == pnum,'scnpartmrp'].mean() dffnl.loc[pnum,'InvAvgMRP'] = dfinv.loc[dfinv['Part #'] == pnum,'MRP'].mean() dffnl.loc[pnum,'InvGST'] = partmaster.loc[partmaster['Part Number'] == pnum,'GST'].mean() dffnl['MRPDiff'] = dffnl['ScnAvgMRP'] - dffnl['InvAvgMRP'] dffnl['TotDiff'] = dffnl['MRPDiff'] * dffnl['ScnSumQty'] dffnl.to_csv(file_path + files + ".csv",index = False) print("Files generation successful") for f1 in os.listdir(file_path): if f1.endswith('.csv'): f1 = os.path.join(file_path, f1) combineddf = pd.read_csv(f1) csv_data_source.append(combineddf) merged_df = pd.concat(csv_data_source, axis = 0) merged_df.to_csv(file_path + 'merged.csv',index=False) print("Data merging successful")
你的代码在Jupyter Lab正常运行,但命令行无输出也不执行,核心原因是环境不一致、路径错误和缺少错误反馈,以下是具体排查和修复步骤:
1. 确认Python环境一致性
Jupyter Lab和命令行可能使用不同的Python解释器,导致依赖包缺失或版本不兼容:
- 在Jupyter中执行:
import sys print(sys.executable) print(pd.__version__) - 在命令行执行:
python --version which python # Linux/macOS where python # Windows pip show pandas
对比两者的Python路径和pandas版本,如果不一致,用Jupyter对应的解释器运行脚本,比如:
# 假设Jupyter用的是conda环境 conda activate your_env_name python your_script.py
2. 修复路径拼接问题
代码中直接用+拼接路径,会因操作系统分隔符(Windows用\,Linux/macOS用/)或输入路径未加结尾分隔符导致路径错误,全部改用os.path.join:
- 替换
folder_path + files为os.path.join(folder_path, files) - 替换
file_path + files + ".csv"为os.path.join(file_path, f"{files}.csv") - 替换
file_path + 'merged.csv'为os.path.join(file_path, 'merged.csv')
同时,在获取输入路径后,用os.path.normpath标准化路径,避免格式问题:
file_path = input("Enter the output files path: ") file_path = os.path.normpath(file_path) folder_path = input("Enter the input files path: ") folder_path = os.path.normpath(folder_path)
3. 修复part_master.csv的路径问题
Jupyter的工作目录是打开的文件夹,但命令行执行时的工作目录是终端当前目录,导致找不到part_master.csv。改为使用脚本所在目录的绝对路径:
script_dir = os.path.dirname(os.path.abspath(__file__)) partmaster = pd.read_csv(os.path.join(script_dir, 'part_master.csv'), encoding='latin1', low_memory=False)
4. 添加错误捕获与日志
脚本没有异常处理,遇到错误会静默终止,添加try-except块打印错误信息,比如在读取Excel文件时:
for files in file_list: try: dfinv = pd.read_excel(os.path.join(folder_path, files), sheet_name="Import") dfscn = pd.read_excel(os.path.join(folder_path, files), sheet_name="ScannedPartNumbers") except Exception as e: print(f"处理文件 {files} 失败: {str(e)}") continue # 后续代码保持不变
5. 检查依赖包
确保命令行环境安装了读取Excel所需的库:
pip install pandas openpyxl xlrd
openpyxl用于读取.xlsx文件,xlrd用于读取.xls文件。
内容的提问来源于stack exchange,提问作者Manjunath Rampure S
相关产品推荐
相关产品推荐

