在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

1.读文件

要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

f = open('test.txt', 'r')

标示符'r'表示以只读方式打开文件,这样,我们就成功地打开了一个文件。

如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在

如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:

f.read()

最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:

f.close()

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:

try:

f = open('test.txt', 'r')

print(f.read())

finally:

if f:

f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open('test.txt', 'r') as f:

print(f.read())

这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

python文件对象提供了三个“读”方法: read()、readline() 和 readlines()。每种方法可以接受一个变量以限制每次读取的数据量。

read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件有10G,内存就爆了,为了保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。

readlines() 一次读取整个文件并返回list,象 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理。

readline() 每次只读取一行,通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 readline()。

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

注意:这三种方法是把每行末尾的'\n'也读进来了,它并不会默认的把'\n'去掉,需要我们手动去掉。

with open('test.txt', 'r') as f:

print(f.readlines())

去掉'\n'

with open('test.txt', 'r') as f:

list = f.readlines()

for i in range(0, len(list)):

#rstrip() 删除 string 字符串末尾的指定字符(默认为空格)

list[i] = list[i].rstrip('\n')

print(list)

关于open()的mode参数:

r':读

'w':写

'a':追加

'r+' == r+w(可读可写,文件若不存在就报错(IOError))

'w+' == w+r(可读可写,文件若不存在就创建)

'a+' ==a+r(可追加可写,文件若不存在就创建)

对应的,如果是二进制文件,就都加一个b就好啦:

'rb'  'wb'  'ab'  'rb+'  'wb+'  'ab+'

例子:

文件格式如下:

20200902 318516220 219740191 202442598 145346084 525567573 367242618 286306137 192043867 334783321430 221143426700 160455962436 94602339494 433776177276 301239190208 204832110249 120639938104 -249591318637

20200903 223312188 199410993 178719377 152127174 341225007 281349829 250664639 186214027 231780516957 199556114436 144084298648 100417175597 293348257021 241912577341 179113193617 116545293491 -156289060416

20200904 232393823 185595779 191135633 170489180 320735346 203114740 188915495 147991632 186928489504 163257126820 143409004929 109248071467 252977430459 175582715437 144615333670 97767150603 -68574891049

20200907 268545057 210126606 175338439 160350584 282467031 256370214 209320202 166267010 244222191516 208504707046 140276526820 104468907865 237108717183 229211911056 161352502634 106400173585 -36738709111

split() 通过指定分隔符对字符串进行分割,返回值为分割后的字符串列表

float() 函数用于将整数和字符串转换成浮点数

int() 函数用于将一个字符串或数字转换为整型

def MakeVol (fVal):

strVal = '---'

strWan = '万'

strYi = '亿'

NUM_WAM = 10000

NUM_YI = 100000000

NUM_WAN_YI = 1000000000000

if abs(fVal) < NUM_WAM:

strVal = '{:.2f}'.format(fVal)

elif abs(fVal) < NUM_YI:

strVal = '{:.2f}{}'.format(fVal / NUM_WAM, strWan)

elif abs(fVal) < NUM_WAN_YI:

strVal = '{:.2f}{}'.format(fVal / NUM_YI, strYi)

else:

strVal = '{:.2f}{}{}'.format(fVal / NUM_WAN_YI, strWan, strYi)

print(strVal)

#时间 特大买单成交量(股) 大买单成交量(股) 中买单成交量(股) 小买单成交量(股)特大卖单成交量(股) 大卖单成交量(股) 中卖单成交量(股) 小卖单成交量(股) 特大买单成交金额(*100) 大买单成交金额(*100) 中买单成交金额(*100) 小买单成交金额(*100)特大卖单成交金额(*100) 大卖单成交金额(*100)中卖单成交金额(*100) 小卖单成交金额(*100) 资金净流入(*100)

#一、解析文件并将数据加载到内存中

#1.读取文件到mfList中

with open('stat_day_800881126.txt', 'r') as file:

mfList = file.readlines()

#2.对文件进行解析,并将数据放入mfDict中

#key:日期 value:list[[0,1,2,3,4,5],[0,1,2,3,4,5]] list[0]主力资金列表:1 2 3 5 10 20日资金数据,list[1]资金列表。

mfDict = {}

for i in range(0, len(mfList)):

#去掉每行中的换行符\n

mfList[i] = mfList[i].rstrip('\n')

#对每行中的数据根据\t分割后放入mfListItem List中,并将其替换到mfList中

mfListItem = mfList[i].split('\t')

mfList[i] = mfListItem

#mfListItem的首个字段是日期

strDate = mfListItem[0]

dayNumMfList = []

dayNumMainMfItemList = []

dayNumMfItemList = []

dayNum = 0

NetInflowSum = 0.0

MainNetInflowSum = 0.0

while dayNum < 20:

if (i - dayNum) >= 0:

dateMf = mfList[i - dayNum]

MainNetInflow = 0.0

NetInflow = 0.0

#主力资金净流入

MainNetInflow = (float(dateMf[9]) + float(dateMf[10]) - float(dateMf[13]) - float(dateMf[14]))/100

#资金净流入

NetInflow = (float(dateMf[9]) + float(dateMf[10]) + float(dateMf[11]) + float(dateMf[12]) - float(dateMf[13]) - float(dateMf[14]) - float(dateMf[15]) - float(dateMf[16]))/100

#dayNum+1日主力资金净流入

MainNetInflowSum = MainNetInflowSum + MainNetInflow

#dayNum+1日资金净流入

NetInflowSum = NetInflowSum + NetInflow

if (dayNum + 1) in [1, 2, 3, 5, 10, 20]:

dayNumMainMfItemList.append(MainNetInflowSum)

dayNumMfItemList.append(NetInflowSum)

dayNum = dayNum + 1

dayNumMfList.append(dayNumMainMfItemList)

dayNumMfList.append(dayNumMfItemList)

mfDict[strDate] = dayNumMfList

print(mfDict)

#二、从内存中查找所需数据

dayNumDic = {'1': 0, '2': 1, '3': 2, '5': 3, '10': 4, '20': 5}

while (1):

strInput = input('input:"date,dayNum(1,2,3,5,10,20),type(1:block,2:stock)",exmple:"20210113,20,1" input 0 to exit:\n')

if(strInput == '0'):

break

strList = strInput.split(',')

if strList.__len__() < 3:

print('invalid input!')

continue

#日期

date = strList[0]

#n日资金数据

mfDayNum = strList[1]

#type=1,板块数据;type=2,个股数据。

type = strList[2]

if (type in ['1', '2']) and (mfDayNum in ['1', '2', '3', '5', '10', '20']):

if mfDict.__contains__(date):

nNetInflow = 0.0

dateMfData = mfDict[date][int(type) - 1]

print(dateMfData)

if len(dateMfData) > dayNumDic[mfDayNum]:

nNetInflow = dateMfData[dayNumDic[mfDayNum]]

print("net_inflow:", nNetInflow)

MakeVol(nNetInflow)

else:

print('no data')

else:

print("not find this date.")

else:

print("invalid input")

参考:

https://www.cnblogs.com/zywscq/p/5441145.html python文件读写小结

https://www.liaoxuefeng.com/wiki/1016959663602400/1017607179232640 文件读写

python2.7读取txt文件,python读取txt文件相关推荐

  1. python读取excel表格-python读取excel表格中的数据

    使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...

  2. python如何读取中文文件-python读取中文txt文本的方法

    对于python2.7 字符串在Python2.7内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码成unicode,再从unico ...

  3. python打开一个文件夹下所有txt文件-python读取一个目录下所有txt里面的内容方法...

    实例如下所示: import os allFileNum = 0 def printPath(level, path): global allFileNum ''''' 打印一个目录下的所有文件夹和文 ...

  4. python读取整个txt文件-Python读写txt文本文件

    一.文件的打开和创建 1 2 3 4 5 >>> f= open('/tmp/test.txt') >>> f.read() 'hello python! hell ...

  5. python 打开当前目录的txt文件-Python - 读取其他文件夹/目录中的文本文件

    这是我的情况:我有一些.txt文件在我可以运行脚本的不同目录中.Python - 读取其他文件夹/目录中的文本文件 mainDir/ -face/ -57268-face-_tracker.txt - ...

  6. python读取指定路径txt文件-python读取txt文件并取其某一列数据的示例

    菜鸟笔记 首先读取的txt文件如下: AAAAF110 0003E818 0003E1FC 0003E770 0003FFFC 90 AAAAF110 0003E824 0003E208 0003E7 ...

  7. Python pandas 读取csv/txt数据文件 python读取csv/txt文件

    导读 主要利用pandas.read_csv接口对csv格式文件或txt文件进行读取,由于CSV格式文件使用非常频繁,功能强大,参数众多,因此在这里专门做详细介绍 使用示例 # 基础用法 import ...

  8. python读取中文txt文本-python读取中文txt文本的方法

    对于python2.7 字符串在Python2.7内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码成unicode,再从unico ...

  9. python读取txt数据-python读取文本文件数据

    本文要点刚要: (一)读文本文件格式的数据函数:read_csv,read_table 1.读不同分隔符的文本文件,用参数sep 2.读无字段名(表头)的文本文件 ,用参数names 3.为文本文件制 ...

最新文章

  1. 专访思必驰初敏:离开微软、放弃阿里,一个语音交互的“实用主义者”
  2. php header setcookie,php中header头设置Cookie与内置setCookie的区别,和js对cookie操作
  3. ansible调用callbacks插件 保存执行结果
  4. MySQL installer
  5. linux 文件夹换所属用户,Linux中账号管理之权限管理(下)
  6. 在Websphere 8.0上安装Liferay 6.2 Enterprise Edition
  7. 移动互联网广告 - 第十更 - 广告投放运营 DashBoard - 2016/12/10
  8. java基础-02数据类型
  9. 基于Session的认证方式_认证流程_Spring Security OAuth2.0认证授权---springcloud工作笔记114
  10. bzoj 1297: [SCOI2009]迷路(矩阵快速幂)
  11. h264编解码器知识点
  12. laravel+php+支付功能,Laravel 支付解决方案之如何使用微信支付进行支付 – Laravel学院...
  13. ssh远程连接虚拟机
  14. Rigify:关于Rigify生成最终绑定时失败的原因及解决办法
  15. 利用Lightroom添加边框及批量导出
  16. 极简数据抓取教程:山水济南,Say I love you with data
  17. js调用html打印去掉页眉页脚,js 客户端打印html 并且去掉页眉、页脚的实例
  18. html5压缩视频文件大小,格式工厂怎么压缩视频大小 只需5步大视频变小视频
  19. 图像极坐标变换的研究
  20. 下载安装Java运行环境

热门文章

  1. SCAU高级语言程序设计--实验10 指针与结构体(1)
  2. 武林风云之数据库的基本操作
  3. 黑莓省电模式 for BlackBerry 9900 9930 9850 OS7 1
  4. sublime下载gbk编码
  5. json字符串转化为map
  6. sdut 算符优先系列之(一)Firstvt和Lastvt集
  7. PHP开发日志 ━━ php、javascript生成二维码的三种方法
  8. 为项目加入第三方字体DS-Digital,并使用
  9. Hololens黑科技101
  10. sketch(三)--插件