python中读写文件之路径总结——系列1

为什么会涉及这个话题呢?因为在进行一些仿真计算的时候,可能读取文件非常多,更多的时候会涉及多平台的问题,所以要确保在win和unix系统下你的程序都可以正常运行,这个时候就涉及到了绝对路径和相对路径的问题了!很多帮助文档讲的不错,但是没有个系统化的思路,很难全部串起来,本系列问题解决这个,废话不多说了,开始!

  1. 导入必须的库:import os, import sys
  2. 你的代码文件所在的绝对路径使用这个完成:os.path.abspath(file),这样就可以获取到你的文件所在的绝对路径,结果等于=‘D:\code\test.py
  3. 问题是你这个文件操作的时候,会涉及数据包data文件夹,程序包script文件夹,还可能涉及结合matlab代码文件夹,所以在你上面的主程序test.py中,可以这样来操作,获取当前文件所在的上层目录:study_dir=os.path.dirname(os.path.abspath(file)=‘D:\code",有了这个,程序可以相对随意的切换目录,读取想要的目录下的文件了,好,继续
  4. data_dir=os.path.join(study_dir,‘DATA’),这个的作用就是通过join函数组合路径,可以很方便的告知程序,你的DATA文件夹下面存放的就是数据,所以通过data_dir你可以随意读取这下面的文件了!
  5. 同理,如果你的代码里还包含了外接的matlab程序,可以这样操作:matlab_dir=os.path.join(‘c:\program files’,‘Matlab’,‘R2017a’,‘bin’,‘matlab’)=‘c:\Program Files\MATLAB\R2017a\bin\matlab’, 这个路径告诉python解释器,你的matlab可执行文件在这里,需要的时候你可以通过matlab_dir方便的启动matlab,并执行你的相关的matlab代码,完成相应的计算,不明白?操作下就理解了
  6. 还有个相对更重要的操作,我们写的代码文件会放在某个文件夹下面,比如script_dir=os.path.join(study_dir,‘SCRIPTS’), 你写的有关操作的代码都可以放在这里,以后你的主程序test.py中可以很方便的通过script_dir来调用这些代码了
  7. 接上6, 通过sys.path.append(scripts_dir)可以方便的将你的代码文件加入到python解释器的搜索路径了,比如,运行下sys.path=[‘D:\code’, ‘C:\WINDOWS\SYSTEM32\python27.zip’, ‘C:\Python27\DLLs’, ‘C:\Python27\lib’, ‘C:\Python27\lib\plat-win’, ‘C:\Python27\lib\lib-tk’, ‘C:\Python27’, ‘C:\Users\lsh\AppData\Roaming\Python\Python27\site-packages’, ‘C:\Python27\lib\site-packages’, ‘C:\Python27\lib\site-packages\PIL’, ‘C:\Python27\lib\site-packages\networkx-1.10-py2.7.egg’, ‘C:\Python27\lib\site-packages\decorator-4.0.9-py2.7.egg’, ‘C:\Python27\lib\site-packages\feedparser-5.2.1-py2.7.egg’, ‘C:\Python27\lib\site-packages\distribute-0.7.3-py2.7.egg’, ‘C:\Python27\lib\site-packages\pydelicious-0.6-py2.7.egg’, ‘C:\Python27\lib\site-packages\python_louvain-0.8-py2.7.egg’, ‘C:\Python27\lib\site-packages\python_pptx-0.6.6-py2.7.egg’, ‘C:\Python27\lib\site-packages\xlsxwriter-1.0.0-py2.7.egg’, ‘C:\Python27\lib\site-packages\pywifi-1.1.8-py2.7.egg’, ‘C:\Python27\lib\site-packages\comtypes-1.1.3-py2.7.egg’, ‘C:\Python27\lib\site-packages\win32’, ‘C:\Python27\lib\site-packages\win32\lib’, ‘C:\Python27\lib\site-packages\Pythonwin’, ‘D:\code\brain_networks\NSPN_WhitakerVertes_PNAS2016-master\SCRIPTS’]这里要特别注意win下路径一般用\来表示,否则可能会出问题,unix下大家自己查下
  8. 上面加入搜索路径之后,你可以采用from 你的代码文件 import *, 把你写的代码模块导入了,很方便吧?你的代码文件可以包含数据处理代码、绘图代码、绘制表格代码等等,本人主要做科研,所以基本使用的就是这些东西,你可以根据自己的需求来设计文件,这样好像便于管理么。
  9. 接下来就可以通过上面的路径读取你的文件,在主程序中可以存放在字典、列表等数据结构中了。比如:fs_dict=read_info(fs_dir),这样式的,具体read_info怎么写呢?给个思路:(1)fs_dir传入你数据所在路径;(2)read_info接收这个路径后,如果涉及读取数据,比如大型数据之类的,可以import numpy as np, 如果会涉及其它路径,可以import os,假设我要读数据,并存放到fs_dict中,那么可以这样干:弄个空字典fs_dict={},记住返回哈!读某个数据文件的时候,比如txt文件,可以这样操作:names_file=os.path.join(fs_dir,‘name’,‘names.txt’),这样就可以获取数据文件存放的路径了;(3)接下来可以存到字典了:fs_dict[‘a’]=get_fs(names_file), OK,思路还清晰吧?用get_fs读取前面路径下的文件了,get_fs写法简单,传入路径采用类似:labels=[line.strip() for line in open(names_file)], 好,全部读取并进行了消除空格的操作,这里一般数据里存放的是一列的数字或者字符串,就能全部读入,存为了列表形式,返回labels,完成,如果需要更复杂的操作,你得想办法自己设计相应的代码了!
    10.同理,各种读文件的方式都可以采用这种路径管理方式完成,这个还是适合大型的数据量管理,但是自己试试总没坏处,代码就是不断折腾,才能玩出新花样来的!好,这个系列完成,不能写太多,要不看糊涂了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值