python實戰之實現excel讀取、統計、寫入的範例講解
这篇文章主要介绍了关于python实战之实现excel读取、统计、写入的示例讲解,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
背景
图像领域内的一个国内会议快要召开了,要发各种邀请邮件,之后要录入、统计邮件回复(参会还是不参会等)。如此重要的任务,老师就托付给我了。ps: 统计回复邮件的时候,能知道谁参会或谁不参会。
而我主要的任务,除了录入邮件回复,就是统计理事和普通会员的参会情况了(参会的、不参会的、没回复的)。录入邮件回复信息没办法只能人工操作,但如果统计也要人工的话,那工作量就太大了(比如在上百人的列表中搜索另外上百人在不在此列表中!!),于是就想到了用python来帮忙,花两天时间不断修改,写了6个版本。。。
摘要
version_1 基本实现了excel读取、统计、显示功能,但问题也有不少,像显示出来后还要自已复制、粘贴到excel表,而且set中还有nan这样的bug。
version_2 相比较version_1而言,此版本用set代替list,可以自动去重。
version_3 解决了set中出现nan的bug,而且还加入的excel写入的功能,但一次只能写入一张表,所以要运行两次才能写入两张表(sheet)。
version_4 的改进在于将version_3中写入两张表格的操作,集成在一个程序里,只需要运行一次便可写入两张表,但也总是会写入两张表,万一你只想写入一张表呢??
version_5 相对之前版本的最大改进在于将程序模块化,更具可读性了; 对修复set中出现nan的方法也进行了改进和简化; 而且可以自由控制写入多少张表了。
version_final 相比较version_5,修复了一个bug,之前需要先验知识,现在更通用一点(prep函数取代了set2list函数)。
version_1
基本实现了excel读取、统计、显示功能,但问题也有不少,像显示出来后还要自已复制、粘贴到excel表,而且set中还有nan这样的值。
#version_1 import os import numpy as np import pandas as pd os.chdir('C:\\Users\\dell\\Desktop\\0711任务') print(os.getcwd()) data = pd.read_excel('for_python.xlsx','Sheet2') return_set = set(data['回执名单']) demand_set = set(data['理事名单']) answer_list = [] unanswer_list = [] for each in demand_set: if each in return_set: answer_list.append(each) else: unanswer_list.append(each) notattend_set = set(data['回执名单'][-15:]) nt = [] for each in notattend_set: if each in answer_list: nt.append(each) def disp(ll, cap, num = True): print(cap) if num: for i, each in enumerate(ll): print(i+1,each) else: for each in enumerate(ll): print(each) disp(answer_list,'\n理事回执名单') disp(unanswer_list,'\n理事未回执名单') disp(nt,'\n理事回执说不参加名单')
version_2
相比较上一个版本,此版本用set代替list,可以自动去重。
#version_2 import os import numpy as np import pandas as pd os.chdir('C:\\Users\\dell\\Desktop\\0711任务') print(os.getcwd()) data = pd.read_excel('for_python.xlsx','Sheet2') return_set = set(data['回执名单']) demand_set = set(data['理事名单']) answer_set = set([]) #理事回执名单 unanswer_set = set([]) #理事未回执名单 for each in demand_set: if each in return_set: answer_set.add(each) else: unanswer_set.add(each) notattend_set = set(data['回执名单'][-17:]) nt = set([]) #理事回执说不参加名单 for each in notattend_set: if each in answer_set: nt.add(each) ans_att_set = answer_set - nt #理事回执参加名单 def disp(ss, cap, num = False): print(cap) if num: for i, each in enumerate(ss): print(i+1,each) else: for each in ss: print(each) #disp(answer_set,'\n理事回执名单') disp(ans_att_set,'\n理事回执说参加名单') disp(nt,'\n理事回执说不参加名单') disp(unanswer_set,'\n理事未回执名单') print(len(ans_att_set),len(nt),len(unanswer_set))
version_3
此版本解决了set中出现nan的bug,而且还加入的excel写入的功能,但一次只能写入一张表,所以要运行两次才能写入两张表(sheet)。
step_1
import os import numpy as np import pandas as pd os.chdir('C:\\Users\\dell\\Desktop') print('work_directory: ', os.getcwd()) data = pd.read_excel('理事与会员名单.xlsx','理事与会员名单') #1.载入excel,得到三个名单 ans_attend_set = set(data['回执参加']) #回执参会名单 N = len(ans_attend_set) ans_notatt_idx = [i for i in range(N) if type(data['回执不参加'][i]) == np.float][0] ans_notatt_set = set(data['回执不参加'][:ans_notatt_idx])#回执不参会名单 concil_idx = [i for i in range(N) if type(data['理事名单'][i]) == np.float][0] concil_set = set(data['理事名单'][:concil_idx]) #理事名单 #2.统计理事参会情况 concil_attend_set = set([]) #理事回执参会名单 concil_notatt_set = set([]) #理事回执不参会名单 concil_notans_set = set([]) #理事未回执名单 for each in concil_set: if each in ans_attend_set: concil_attend_set.add(each) elif each in ans_notatt_set: concil_notatt_set.add(each) else: concil_notans_set.add(each) #3. 显示结果 def disp(ss, cap, num = True): #ss: 名单集合 #cap: 开头描述 print(cap,'({})'.format(len(ss))) for i in range(np.ceil(len(ss)/5).astype(int)): pre = i * 5 nex = (i+1) * 5 #调整显示格式 dd = '' for each in list(ss)[pre:nex]: if len(each) == 2: dd = dd + ' ' + each elif len(each) == 3: dd = dd + ' ' + each else: dd = dd + '' + each print('{:3.0f} -{:3.0f} {}'.format(i*5+1,(i+1)*5,dd)) disp(concil_attend_set,'\n参会理事') disp(concil_notatt_set,'\n不参会理事') disp(concil_notans_set,'\n未回执理事') #4. 将理事参会情况,写入excel df = pd.DataFrame(list(concil_attend_set),columns = ['参会理事']) df['']=pd.DataFrame(['']) df['序号1'] = pd.DataFrame(np.arange(len(concil_notatt_set))+1) df['不参会理事'] = pd.DataFrame(list(concil_notatt_set)) df['_']=pd.DataFrame(['']) df['序号2'] = pd.DataFrame(np.arange(len(concil_notans_set))+1) df['未回执理事'] = pd.DataFrame(list(concil_notans_set)) df.index = df.index + 1 df.to_excel('理事和会员回执统计.xlsx', sheet_name='理事回执统计') print('\n\n写入excel成功~~')
step_2
import os import numpy as np import pandas as pd os.chdir('C:\\Users\\dell\\Desktop') print('work_directory: ', os.getcwd()) data = pd.read_excel('理事与会员名单.xlsx','理事与会员名单') #1.载入excel,得到三个名单 ans_attend_set = set(data['回执参加']) #回执参会名单 N = len(ans_attend_set) ans_notatt_idx = [i for i in range(N) if type(data['回执不参加'][i]) == np.float][0] ans_notatt_set = set(data['回执不参加'][:ans_notatt_idx])#回执不参会名单 mem_idx = [i for i in range(N) if type(data['被推荐人'][i]) == np.float][0] mem_set = set(data['被推荐人'][:mem_idx]) #被推荐为会员代表名单 #2.统计会员参会情况 mem_attend_set = set([]) #回执参会会员 mem_notatt_set = set([]) #回执不参会会员 mem_notans_set = set([]) #未回执会员 for each in mem_set: if each in ans_attend_set: mem_attend_set.add(each) elif each in ans_notatt_set: mem_notatt_set.add(each) else: mem_notans_set.add(each) #3. 显示结果 def disp(ss, cap, num = True): #ss: 名单集合 #cap: 开头描述 print(cap,'({})'.format(len(ss))) for i in range(np.ceil(len(ss)/5).astype(int)): pre = i * 5 nex = (i+1) * 5 #调整显示格式 dd = '' for each in list(ss)[pre:nex]: if len(each) == 2: dd = dd + ' ' + each elif len(each) == 3: dd = dd + ' ' + each else: dd = dd + '' + each print('{:3.0f} -{:3.0f} {}'.format(i*5+1,(i+1)*5,dd)) disp(mem_attend_set,'\n参会会员') disp(mem_notatt_set,'\n不参会会员') disp(mem_notans_set,'\n未回执会员') #4. 将会员参会情况,写入excel if len(mem_attend_set) > len(mem_notans_set): print('#1') L = len(mem_attend_set) mem_notans_list = list(mem_notans_set) mem_notans_list.extend([''] * (L - len(mem_notans_set))) mem_attend_list = list(mem_attend_set) else: print('#2') L = len(mem_notans_set) mem_attend_list = list(mem_attend_set) mem_attend_list.extend([''] * (L - len(mem_attend_set))) mem_notans_list = list(mem_notans_set) df = pd.DataFrame(mem_attend_list,columns = ['参会会员']) df['']=pd.DataFrame(['']) if len(mem_notatt_set) == 0: df['序号1'] = np.NaN df['不参会会员'] = np.NaN else: df['序号1'] = pd.DataFrame(np.arange(len(mem_notatt_set))+1) df['不参会会员'] = pd.DataFrame(list(mem_notatt_set)) df['_']=pd.DataFrame(['']) df['序号2'] = pd.DataFrame(np.arange(len(mem_notans_set))+1) df['未回执会员'] = pd.DataFrame(mem_notans_list) df.index = df.index + 1 df0 = pd.read_excel('理事和会员回执统计.xlsx',sheet_name='理事回执统计') writer = pd.ExcelWriter('理事和会员回执统计.xlsx') df0.to_excel(writer, sheet_name='理事回执统计') df.to_excel(writer, sheet_name='会员回执统计') writer.save() print('\n\n写入excel成功~~')
version_4
version_4的改进在于将version_3中写入两张表格的操作,集成在一个程序里,只需要运行一次便可写入两张表,也总是会写入两张表。问题是要是你只想写入一张表呢??
import os import numpy as np import pandas as pd os.chdir('C:\\Users\\dell\\Desktop') print('work_directory: ', os.getcwd()) loadfile_sheet = ['理事与会员名单.xlsx','理事与会员名单'] columns = ['回执参加','回执不参加','理事','会员'] savefile_sheet = ['理事和会员回执统计.xlsx','理事回执统计','会员回执统计'] display = [1,1] def main(loadfile_sheet,columns,savefile_sheet,display): #1. 载入excel,得到名单 data = pd.read_excel(loadfile_sheet[0],loadfile_sheet[1]) def first_nan_index(pd): for i, each in enumerate(pd): if type(each) == np.float: return i return i idx = first_nan_index(data[columns[0]]) ans_attend_set = set(data[columns[0]][:idx])#回执参会名单 idx = first_nan_index(data[columns[1]]) ans_notatt_set = set(data[columns[1]][:idx])#回执不参会名单 idx = first_nan_index(data[columns[2]]) concil_set = set(data[columns[2]][:idx])#理事名单 idx = first_nan_index(data[columns[3]]) mem_set = set(data[columns[3]][:idx])#会员名单 #2. 统计参会情况 concil_attend_set = set([]) #回执参会理事 concil_notatt_set = set([]) #回执不参会理事 concil_notans_set = set([]) #未回执理事 for each in concil_set: if each in ans_attend_set: concil_attend_set.add(each) elif each in ans_notatt_set: concil_notatt_set.add(each) else: concil_notans_set.add(each) mem_attend_set = set([]) #回执参会会员 mem_notatt_set = set([]) #回执不参会会员 mem_notans_set = set([]) #未回执会员 for each in mem_set: if each in ans_attend_set: mem_attend_set.add(each) elif each in ans_notatt_set: mem_notatt_set.add(each) else: mem_notans_set.add(each) #3. 是否显示中间结果 def disp(ss, cap, num = True): #ss: 名单集合 #cap: 开头描述 print(cap,'({})'.format(len(ss))) for i in range(np.ceil(len(ss)/5).astype(int)): pre = i * 5 nex = (i+1) * 5 #调整显示格式 dd = '' for each in list(ss)[pre:nex]: if len(each) == 2: dd = dd + ' ' + each elif len(each) == 3: dd = dd + ' ' + each else: dd = dd + '' + each print('{:3.0f} -{:3.0f} {}'.format(i*5+1,(i+1)*5,dd)) if display[0]: disp(concil_attend_set,'\n参会理事') disp(concil_notatt_set,'\n不参会理事') disp(concil_notans_set,'\n未回执理事') if display[1]: disp(mem_attend_set,'\n参会会员') disp(mem_notatt_set,'\n不参会会员') disp(mem_notans_set,'\n未回执会员') #4. 写入excel def trans_pd(df,ss,cap,i=1): if len(ss) == 0: df['序号{}'.format(i)] = np.NaN df[cap] = np.NaN else: df['序号{}'.format(i)] = pd.DataFrame(np.arange(len(ss))+1) df[cap] = pd.DataFrame(list(ss)) df['_'*i]=pd.DataFrame(['']) return df def set2list(mem_attend_set,mem_notans_set): if len(mem_attend_set) > len(mem_notans_set): L = len(mem_attend_set) mem_notans_list = list(mem_notans_set) mem_notans_list.extend([''] * (L - len(mem_notans_set))) mem_attend_list = list(mem_attend_set) else: L = len(mem_notans_set) mem_attend_list = list(mem_attend_set) mem_attend_list.extend([''] * (L - len(mem_attend_set))) mem_notans_list = list(mem_notans_set) return mem_attend_list,mem_notans_list mem_attend_list, mem_notans_list = set2list(mem_attend_set, mem_notans_set) df1 = pd.DataFrame(mem_attend_list,columns = ['参会会员']) df1['']=pd.DataFrame(['']) df1 = trans_pd(df1,mem_notatt_set,'不参会会员') df1 = trans_pd(df1,mem_notans_set,'未回执会员',2) df1.index = df1.index + 1 concil_attend_list, concil_notans_list = set2list(concil_attend_set, concil_notans_set) df2 = pd.DataFrame(concil_attend_list,columns = ['参会理事']) df2['']=pd.DataFrame(['']) df2 = trans_pd(df2,concil_notatt_set,'不参会理事') df2 = trans_pd(df2,concil_notans_list,'未回执理事',2) df2.index = df2.index + 1 writer = pd.ExcelWriter(savefile_sheet[0]) df2.to_excel(writer, sheet_name=savefile_sheet[1]) df1.to_excel(writer, sheet_name=savefile_sheet[2]) writer.save() print('\n\n写入excel成功~~') if __name__ == '__main__': main(loadfile_sheet,columns,savefile_sheet,display)
version_5
version_5对修复set中出现nan的方法进行了改进和简化; 而且将程序模块化,更具可读性; 可以自由控制写入多少张表了。
import os import numpy as np import pandas as pd os.chdir('C:\\Users\\dell\\Desktop') print('work_directory: ', os.getcwd()) loadfile_sheet = ['理事与会员名单.xlsx','理事与会员名单'] common_columns = ['回执参加','回执不参加'] concerned_columns = ['理事','会员'] disp_columns = ['参会','不参会','未回执'] savefile_sheet = ['理事和会员回执统计.xlsx','理事回执统计','会员回执统计'] def disp(ss, cap, num = True): #ss: 名单集合 #cap: 开头描述 print(cap,'({})'.format(len(ss))) for i in range(np.ceil(len(ss)/5).astype(int)): pre = i * 5 nex = (i+1) * 5 #调整显示格式 dd = '' for each in list(ss)[pre:nex]: if len(each) == 2: dd = dd + ' ' + each elif len(each) == 3: dd = dd + ' ' + each else: dd = dd + '' + each print('{:3.0f} -{:3.0f} {}'.format(i*5+1,(i+1)*5,dd)) def trans_pd(df,ss,cap,i=1): df['_'*i]=pd.DataFrame(['']) if len(ss) == 0: df['序号{}'.format(i)] = np.NaN df[cap] = np.NaN else: df['序号{}'.format(i)] = pd.DataFrame(np.arange(len(ss))+1) df[cap] = pd.DataFrame(list(ss)) return df def set2list(ss1,ss2): if len(ss1) > len(ss2): L = len(ss1) ss2_list = list(ss2) ss2_list.extend([''] * (L - len(ss2))) ss1_list = list(ss1) else: L = len(ss2) ss1_list = list(ss1) ss1_list.extend([''] * (L - len(ss1))) ss2_list = list(ss2) return ss1_list,ss2_list def get_df(loadfile_sheet,common_columns,concerned_column,disp_columns, display = True): #1. 载入excel data = pd.read_excel(loadfile_sheet[0],loadfile_sheet[1]) common_set1 = set(data[common_columns[0]]) common_set1.discard(np.NaN) common_set2 = set(data[common_columns[1]]) common_set2.discard(np.NaN) concerned_set = set(data[concerned_column]) concerned_set.discard(np.NaN) #2. 统计 concerned_in_set_1 = set([]) concerned_in_set_2 = set([]) concerned_in_no_set = set([]) for each in concerned_set: if each in common_set1: concerned_in_set_1.add(each) elif each in common_set2: concerned_in_set_2.add(each) else: concerned_in_no_set.add(each) #3. 显示 if display: disp(concerned_in_set_1,'\n'+disp_columns[0]+concerned_column) disp(concerned_in_set_2,'\n'+disp_columns[1]+concerned_column) disp(concerned_in_no_set,'\n'+disp_columns[2]+concerned_column) #4. 返回DataFrame concerned_in_set_1_list, concerned_in_set_2_list = set2list(concerned_in_set_1, concerned_in_no_set) df = pd.DataFrame(concerned_in_set_1_list,columns = [disp_columns[0]]) df = trans_pd(df,concerned_in_set_2,disp_columns[1]) df = trans_pd(df,concerned_in_no_set,disp_columns[2],2) df.index = df.index + 1 return df def save2excel(df, concerned_column, savefile_sheet): L = len(savefile_sheet) - 1 idx = 0 for i in np.arange(L)+1: if concerned_column in savefile_sheet[i]: idx = i break if idx != 0: names = locals() for i in np.arange(L)+1: if i != idx: names['df%s' % i] = pd.read_excel(savefile_sheet[0], sheet_name=savefile_sheet[i]) writer = pd.ExcelWriter(savefile_sheet[0]) for i in np.arange(L)+1: if i != idx: names['df%s' % i].to_excel(writer, sheet_name=savefile_sheet[i]) else: df.to_excel(writer, sheet_name=savefile_sheet[i]) writer.save() else: names = locals() for i in np.arange(L)+1: names['df%s' % i] = pd.read_excel(savefile_sheet[0], sheet_name=savefile_sheet[i]) writer = pd.ExcelWriter(savefile_sheet[0]) for i in np.arange(L)+1: names['df%s' % i].to_excel(writer, sheet_name=savefile_sheet[i]) df.to_excel(writer, sheet_name=concerned_column) writer.save() print('writing success') if __name__ == '__main__': for concerned_column in concerned_columns: df = get_df(loadfile_sheet,common_columns, concerned_column,disp_columns, display = True) save2excel(df, concerned_column, savefile_sheet)
version_final
相比较version_5,修复了一个bug,之前需要先验知识,现在更通用一点(prep函数取代了set2list函数)。
import os import numpy as np import pandas as pd os.chdir('C:\\Users\\dell\\Desktop') print('work_directory: ', os.getcwd()) loadfile_sheet = ['理事与会员名单.xlsx','理事与会员名单'] common_columns = ['回执参加','回执不参加'] concerned_columns = ['理事','会员'] disp_columns = ['参会','不参会','未回执'] savefile_sheet = ['理事和会员回执统计.xlsx','理事回执统计','会员回执统计'] def disp(ss, cap, num = True): #功能:显示名单 #ss : 名单集合 #cap :开头描述 print(cap,'({})'.format(len(ss))) for i in range(np.ceil(len(ss)/5).astype(int)): pre = i * 5 nex = (i+1) * 5 #调整显示格式 dd = '' for each in list(ss)[pre:nex]: if len(each) == 2: dd = dd + ' ' + each elif len(each) == 3: dd = dd + ' ' + each else: dd = dd + '' + each print('{:3.0f} -{:3.0f} {}'.format(i*5+1,(i+1)*5,dd)) def trans_pd(df,ll,cap,i=1): #功能:生成三列--空列、序号列、数据列 #df : DataFrame结构 #ll : 列表 #cap : 显示的列名 #i : 控制空列的名字 df['_'*i]=pd.DataFrame(['']) if len(set(ll)) == 1: df['序号{}'.format(i)] = np.NaN df[cap] = np.NaN else: df['序号{}'.format(i)] = pd.DataFrame(np.arange(len(set(ll))-1)+1) df[cap] = pd.DataFrame(ll) return df def prep(ss, N): #功能:预处理,生成列表,并补齐到长度N #ss : 集体 #N :长度 ll = list(ss) L = len(ll) ll.extend([np.NaN] * (N-L)) return ll def get_df(loadfile_sheet,common_columns,concerned_column,disp_columns, display = True): #1. 载入excel data = pd.read_excel(loadfile_sheet[0],loadfile_sheet[1]) common_set1 = set(data[common_columns[0]]) common_set2 = set(data[common_columns[1]]) concerned_set = set(data[concerned_column]) common_set1.discard(np.NaN) common_set2.discard(np.NaN) concerned_set.discard(np.NaN) #2. 统计 concerned_in_set_1 = set([]) concerned_in_set_2 = set([]) concerned_in_no_set = set([]) for each in concerned_set: if each in common_set1: concerned_in_set_1.add(each) elif each in common_set2: concerned_in_set_2.add(each) else: concerned_in_no_set.add(each) #3. 显示 if display: disp(concerned_in_set_1,'\n'+disp_columns[0]+concerned_column) disp(concerned_in_set_2,'\n'+disp_columns[1]+concerned_column) disp(concerned_in_no_set,'\n'+disp_columns[2]+concerned_column) #4. 返回DataFrame N = np.max([len(concerned_in_set_1),len(concerned_in_set_2),len(concerned_in_no_set)]) concerned_in_set_1_list = prep(concerned_in_set_1,N) concerned_in_set_2_list = prep(concerned_in_set_2,N) concerned_in_no_list = prep(concerned_in_no_set,N) df = pd.DataFrame(concerned_in_set_1_list,columns = [disp_columns[0]]) df = trans_pd(df,concerned_in_set_2_list,disp_columns[1]) df = trans_pd(df,concerned_in_no_list,disp_columns[2],2) df.index = df.index + 1 return df def save2excel(df, concerned_column, savefile_sheet): L = len(savefile_sheet) - 1 idx = 0 for i in np.arange(L)+1: if concerned_column in savefile_sheet[i]: idx = i break if idx != 0: #如果有对应sheet names = locals() for i in np.arange(L)+1: if i != idx: names['df%s' % i] = pd.read_excel(savefile_sheet[0], sheet_name=savefile_sheet[i]) writer = pd.ExcelWriter(savefile_sheet[0]) for i in np.arange(L)+1: if i != idx: names['df%s' % i].to_excel(writer, sheet_name=savefile_sheet[i]) else: df.to_excel(writer, sheet_name=savefile_sheet[i]) writer.save() else: #如果没有对应sheet,创建一个新sheet names = locals() for i in np.arange(L)+1: names['df%s' % i] = pd.read_excel(savefile_sheet[0], sheet_name=savefile_sheet[i]) writer = pd.ExcelWriter(savefile_sheet[0]) for i in np.arange(L)+1: names['df%s' % i].to_excel(writer, sheet_name=savefile_sheet[i]) df.to_excel(writer, sheet_name=concerned_column) writer.save() print('writing success') if __name__ == '__main__': for concerned_column in concerned_columns: df = get_df(loadfile_sheet,common_columns, concerned_column,disp_columns, display = True) save2excel(df, concerned_column, savefile_sheet)
相关推荐:
以上是python實戰之實現excel讀取、統計、寫入的範例講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

在CentOS系統上高效訓練PyTorch模型,需要分步驟進行,本文將提供詳細指南。一、環境準備:Python及依賴項安裝:CentOS系統通常預裝Python,但版本可能較舊。建議使用yum或dnf安裝Python3併升級pip:sudoyumupdatepython3(或sudodnfupdatepython3),pip3install--upgradepip。 CUDA與cuDNN(GPU加速):如果使用NVIDIAGPU,需安裝CUDATool

在CentOS系統上啟用PyTorchGPU加速,需要安裝CUDA、cuDNN以及PyTorch的GPU版本。以下步驟將引導您完成這一過程:CUDA和cuDNN安裝確定CUDA版本兼容性:使用nvidia-smi命令查看您的NVIDIA顯卡支持的CUDA版本。例如,您的MX450顯卡可能支持CUDA11.1或更高版本。下載並安裝CUDAToolkit:訪問NVIDIACUDAToolkit官網,根據您顯卡支持的最高CUDA版本下載並安裝相應的版本。安裝cuDNN庫:前

Docker利用Linux內核特性,提供高效、隔離的應用運行環境。其工作原理如下:1. 鏡像作為只讀模板,包含運行應用所需的一切;2. 聯合文件系統(UnionFS)層疊多個文件系統,只存儲差異部分,節省空間並加快速度;3. 守護進程管理鏡像和容器,客戶端用於交互;4. Namespaces和cgroups實現容器隔離和資源限制;5. 多種網絡模式支持容器互聯。理解這些核心概念,才能更好地利用Docker。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

在CentOS下選擇PyTorch版本時,需要考慮以下幾個關鍵因素:1.CUDA版本兼容性GPU支持:如果你有NVIDIAGPU並且希望利用GPU加速,需要選擇支持相應CUDA版本的PyTorch。可以通過運行nvidia-smi命令查看你的顯卡支持的CUDA版本。 CPU版本:如果沒有GPU或不想使用GPU,可以選擇CPU版本的PyTorch。 2.Python版本PyTorch

MinIO對象存儲:CentOS系統下的高性能部署MinIO是一款基於Go語言開發的高性能、分佈式對象存儲系統,與AmazonS3兼容。它支持多種客戶端語言,包括Java、Python、JavaScript和Go。本文將簡要介紹MinIO在CentOS系統上的安裝和兼容性。 CentOS版本兼容性MinIO已在多個CentOS版本上得到驗證,包括但不限於:CentOS7.9:提供完整的安裝指南,涵蓋集群配置、環境準備、配置文件設置、磁盤分區以及MinI

在CentOS系統上進行PyTorch分佈式訓練,需要按照以下步驟操作:PyTorch安裝:前提是CentOS系統已安裝Python和pip。根據您的CUDA版本,從PyTorch官網獲取合適的安裝命令。對於僅需CPU的訓練,可以使用以下命令:pipinstalltorchtorchvisiontorchaudio如需GPU支持,請確保已安裝對應版本的CUDA和cuDNN,並使用相應的PyTorch版本進行安裝。分佈式環境配置:分佈式訓練通常需要多台機器或單機多GPU。所
