不同编程语言中文件存取相关操作

来源:互联网 发布:淘宝永久封店怎么办 编辑:程序博客网 时间:2024/05/29 09:23

当在不同语言间切换的时候,对一些相似操作容易产生混淆。在这里记录下不同语言中文件读取的区别,这篇文章始终不会写完,我偶尔碰到一点就记录一点。


1、Python中文件操作

1.1 获取文件操作权限

Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。
你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。
语法:

file object = open(file_name [, access_mode][, buffering])

例如:fo = open(“XXX.txt”, “r+”)
各个参数的细节如下:

file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行;如果将buffering的值设为大于1的整数,这就是寄存区的缓冲大小;如果取负值,寄存区的缓冲大小则为系统默认。

不同模式打开文件的完全列表:

模式描述r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。r+打开一个文件用于读写。文件指针将会放在文件的开头。rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

1.2 执行文件操作

利用file对象的属性可以对实现对文件的操作主要有:获取文件相关信息、读文件(获取内容)、写文件、关闭file对象
以下是和file对象相关的属性列表:

属性描述示例输出结果file.mode()返回被打开文件的访问模式。fo=open(“Python读写文件.txt”,’r’)
print(fo.mode)rfile.name()返回文件的名称。fo=open(“Python读写文件.txt”,’r’)
print(fo.name)Python读写文件.txtfile.tell()返回指针在当前文件中的位置,按字符算,下一次读取会从该位置之后进行fo=open(“Python读写文件.txt”,’r’,encoding=’UTF-8’)
content=fo.read(10)
print(content)
print(fo.tell())try somet
12
:似乎结果不同file.seek(offset,[,from])重新调整指针位置,from表示起始的参考位置,offset表示离参考位置的距离fo=open(“Python读写文件.txt”,’r’,encoding=’UTF-8’)
content=fo.read(10)print(content)
print(fo.tell())
position=fo.seek(0,0)
content=fo.read(10)
print(content)print(fo.tell())try somet
12
try somet
12file.read()按字符读取文件内容,可以是二进制数据,而不仅仅是文字fo=open(“Python读写文件.txt”,’r’,encoding=’UTF-8’)
content=fo.read(10)
print(content)try sometfile.readline()整行读取fo=open(“Python读写文件.txt”,’r’,encoding=’UTF-8’)
content=fo.readline()
print(content)……file.readlines()整个文件一次性读取,此时要注意文件大小,以免产生错误fo=open(“Python读写文件.txt”,’r’,encoding=’UTF-8’)
content=fo.readlines()
print(content)……file.write()往文件中写内容,file对象要以写方式或追回方式打开fo=open(“Python读写文件.txt”,’a’,encoding=’UTF-8’)
content=fo.write(“我只是试试”)file.closed()关闭file对象fo=open(“Python读写文件.txt”,’a’,encoding=’UTF-8’)
content=fo.write(“我只是试试”)
fo.close()

1.3 其他注意事项

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

file_object = open("Python读写文件.txt",'r',,encoding='UTF-8')try:     all_the_text = file_object.read( )finally:     file_object.close( )

注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。

更简洁的方式

with open('/path/to/file', 'r') as f:    print(f.read())

自动帮我们调用close()方法


1.4 关于中文乱码问题

要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码。如果读入UTF-8编码的txt文件提示“builtins.UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa0 in position 76: illegal multibyte sequence”的错误,可以如此操作,fo=open(“Python读写文件.txt”,’r’,,encoding=’UTF-8’);但是以这种用realines读入时,文件数据开头有“\ufeff”,有时间再查找原因。


1.5 利用Pandas库读取文件数据

pandas中有很多种读数据的函数,像读文本的read_table()函数,读csv文件的read_csv()函数。


2、R中文件操作


2.1 获取文件操作权限


2.2 执行文件操作


2.3 其他注意事项


2.4 关于中文乱码问题


3、Java中文件操作


3.1 获取文件操作权限


3.2 执行文件操作


3.3 其他注意事项


3.4 关于中文乱码问题

原创粉丝点击