c语言打开文件并输出,文件的读取,c语言打开文件并输出
文件的读取,c语言打开文件并输出
在做数据分析的过程中,经常会遇到文件的读取。我想很多人都在这个环节遇到过问题,所以就把自己掌握的一些文件读取方法记录下来,以及过程中遇到的一些状况和解决方法列出来,以便交流。
open
open() 函数用于创建或打开指定文件,该函数的语法格式如下:
file = open(file_name [, mode[, buffering]])
参数说明:
file:表示要创建的文件对象。
file_name:要创建或打开文件的文件名称。
mode:可选参数,用于指定文件的打开模式。默认以只读(r)模式打开文件。
buffing:可选参数,用于指定对文件做读写操作时,是否使用缓冲区。如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
不同模式打开文件的完全列表:
模式描述
r
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+
打开一个文件用于读写。文件指针将会放在文件的开头。
rb+
以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w
打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb
以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+
打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+
以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
基本用法如下:
f = open('filename', 'r')print(f.read())
f.close()#释放文件
简易写法:with语句结束会自动关闭文件
with open('filename', 'r') as f:print(f.read())
file 对象方法
file.read([size]):size 未指定则返回整个文件,如果文件大小 >2 倍内存则有问题,f.read()读到文件尾时返回""(空字串)。
file.readline():返回一行。
file.readlines([size]):返回包含size行的列表, size 未指定则返回全部行。
for line in f: print(line):通过迭代器访问。
f.write("hello\n"):如果要写入字符串以外的数据,先将他转换为字符串。
f.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的比特数)。
f.seek(偏移量,[起始位置]):用来移动文件指针。
偏移量: 单位为比特,可正可负
起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾
f.close() 关闭文件
文件的编码问题
在读取文件的时候,容易出现编码问题,例如:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 0: invalid start byte
这是因为open()函数在读取文件时默认使用utf-8编码,当文件编码不匹配时,就会报类似上面的编码错误。这时可以通过指定编码类型来解决,例如:
with open('filename', 'r', encoding='gbk') as file:
file.read()
大文件的读取技巧
python读取文件一般情况是利用open()函数以及read()函数来完成,但这种方法适用于读取小文件,因为read()函数会将数据读入内存。当需读取文件大于内存的大小时,会造成MemoryError,也就是发生内存溢出。所以需要一定的技巧来实现大文件的读取。
解决方法:
(1)read(参数):通过参数指定每次读取的大小长度,循环读取
with open('filename','r') as file:whileTrue:
block= file.read(1024)if notblock:break
(2)readline():每次获取一行数据
with open('filename','r') as file:for line infile.readline():pass #对应操作
(3)对可迭代对象file进行迭代,这样会自动的使用buffered IO以及内存管理
with open('filename','r') as file:for line infile:pass #对应操作
json
当我们读取的文件是Json格式的时候,利用json包可以方便的将数据转换为python的字典格式
Json模块提供了四个功能:dumps、dump、loads、load
dumps把数据类型转换成字符串
dump把数据类型转换成字符串并存储在文件中
loads把字符串转换成数据类型
load把文件打开从字符串转换成数据类型
示例,将一个字符串转换为字典:
importjson
string= '{"name":"张三", "age":24}'dict1= json.loads(string)
http://www.dengb.com/Pythonjc/1370165.htmlwww.dengb.comtruehttp://www.dengb.com/Pythonjc/1370165.htmlTechArticle文件的读取,c语言打开文件并输出 在做数据分析的过程中,经常会遇到文件的读取。我想很多人都在这个环节遇到过问题,所以就把自己...
c语言打开文件并输出,文件的读取,c语言打开文件并输出相关推荐
- matlab打开dat形式文件_matlab的各种数据读取(txtdatmat等格式)文件打开关闭
matlab 的各种数据读取( txt , dat , mat 等格式) ,文件打开 关闭 MATLAB 提供了多种方式从磁盘读入文件或将数据输 入到工作空间,即读取数据,又叫导入数据:将工作空间的 ...
- c 语言 求文件大小,C程序中如何读取目录中的文件并判断文件大小等信息
读取目录内容 应用程序可以用readdir系列函数来读取目录内容. #include #include DIR *opendir(const char *name); //成功返回目录指针,失败返回N ...
- PLC读取PC文件(汇川PLC读取电脑上的文件)
qq群里老被人吊,看不起玩C#的,我只是业余看看下位机,发现汇川PLC是真的香,支持G代码,带的ecat轴数也多.就是新的购买渠道不行. 学习资料还有些欠缺.比如PLC去读取电脑上的G代码文件.每次拷 ...
- 【C++】42.使用YAML文件进行参数配置、读取与生成YAML文件
关于配置文件的使用,除了本文的yaml的方法,经常使用的还有proto的方法,请参考我另一篇博客:proto相关用法:方法2.. c++中如果要使用YAML,需要安装yaml-cpp库,安装完成后使用 ...
- php读取某类型文件代码,php代码实现读取文件头判断文件类型
php代码实现读取文件头判断文件类型,支持图片.rar.exe等后缀. 案例: //为图片的路径可以用d:/upload/11.jpg等绝对路径 $file = fopen($filename, &q ...
- C语言文件操作(三)读取指定路径txt文件,并输出文件内容
#include <stdio.h> #include <stdlib.h> #include <assert.h> int main() {//读取数据int a ...
- python读取txt文件并写入excel-Python实现读取并写入Excel文件过程解析
需求是有两个Excel文件:1.xlsx,2.xlsx,比较2.xlsx中的A,B列和1.xlsx中的A,B列:查找1.xlsx中存在,2.xlsx中不存在的行数据,输出到result.xlsx文件中 ...
- php读取大文件某行内容,PHP读取和修改大文件的某行内容_PHP教程
最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,file()直接读取是不可能的,我使用fgets来跳转到指定行,并用fwrite修改某个字符串: $fp = fopen(d:/ ...
- java 逐行读写文件_用Java逐行读取和写入大文件的最快方法
小编典典 我怀疑您的真正问题是您的硬件有限,而您所做的只是软件不会带来太大变化.如果您有足够的内存和CPU,可以使用更高级的技巧,但是如果由于文件未缓存而仅在硬盘上等待,则不会有太大的不同. BTW: ...
- [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
参考链接: 使用Pandas在Python中读写CSV文件 前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Pyth ...
最新文章
- 教你如何写框架------用中文构建脚本
- 天正计算机命令大全,天正CAD 中按Ctrl+v在不同图中粘贴出现“未知命令T81_tpasteclip”,直接在CAD中就能操作...
- AT1219 歴史の研究 解题报告
- SQL存储过程与自定义函数实例
- wpf datagrid 数据为null时 显示背景图_[C#.NET 拾遗补漏]09:数据标注与数据校验
- mysql ----DML(掌握)
- 前端 CSS 变量简介及基本使用方法
- 360笔试题-字符置换
- inDesign教程,如何设置名片?
- TCP/IP网络知识点总结
- BZOJ5294 BJOI2018二进制(线段树)
- GitHub、Apache 等平台开源项目,受美国出口管制么?
- 纽约州立大学石溪分校计算机专业排名,纽约州立大学石溪分校排名怎么样?
- 关于field-of-view和receptive field
- java判断图中两点是否连通_连通分量(求有几个连通分量+判断是否两点连通+是否为强联通图 相应例子)...
- 共推人工智能创新发展 校企合作协同育人
- mysql 数据泵_数据泵导出/导入数据
- 定制智慧交通(一)--启动项目原因
- 基于OpenCV(C++)的简单哈哈镜实现
- 文字图片转换成word文档的方法?
热门文章
- 怎么创建css样式表,怎样创建可反复使用的外部CSS样式表?
- Arduino UNO+OLED可视化音乐频谱:32段分频0.96寸OLED显示细条频谱线
- 拼多多砍价群大王:拼多多为什么3年就能上市?
- 2021ccpc广州站总结
- 如何使用Github实现协同工作(例子:两人合作写代码)
- java读文件在页面输出_Java读取html页面以文件流方式输出显示在页面
- 微型计算机硬件调研报告,计算机硬件市场调研报告
- 网络模块的568B和568A
- CSP 201903-2 二十四点 python (python有如神助)
- 用计算机找到自己的另一半,生辰八字算婚期计算器 免费算个人感情婚姻的另一半...