读写文本数据

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Helvetica; color: #29556f }

使用其他分隔符或行终止符打印

问题:

  你想使用print() 函数输出数据,但是想改变默认的分隔符或者行尾符。

解决方案:

  可以使用在print() 函数中使用sep 和end 关键字参数,以你想要的方式输出。比如:

 1 #正常输出
 2 print(‘dmeon‘, 89 , 8, 23)
 3
 4 #指定分隔符,
 5 print(‘dmeon‘, 89 , 8, 23, sep=‘,‘)
 6
 7 #指定结尾符号
 8 print(‘dmeon‘, 89 , 8, 23, sep=‘,‘,end=‘!!!\n‘)
 9
10 #使用end 参数也可以在输出中禁止换行。比如:
11 for i in range(5):
12     print(i, end=‘ ‘)
13
14 #另外一种添加分隔符的方法
15 print()
16 print(‘分隔符的方法‘.center(30, ‘-‘))
17 s1 = (‘dmeon‘, 89 , 8, 23)
18 result = ‘ ‘.join((str(s) for s in s1))
19 print(result)
20
21 #高逼格的方法
22 print("s1的值", s1)
23 print(‘高逼格的输出方式‘, *s1,sep=‘,‘)

以上代执行输出的结果为:

dmeon 89 8 23
dmeon,89,8,23
dmeon,89,8,23!!!
0 1 2 3 4
------------分隔符的方法------------
dmeon 89 8 23
s1的值 (‘dmeon‘, 89, 8, 23)
高逼格的输出方式,dmeon,89,8,23

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Helvetica; color: #29556f }

读写字节数据

问题:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }

  你想读写二进制文件,比如图片,声音文件等等

解决方案:

  使用模式为rb 或wb 的open() 函数来读取或写入二进制数据。比如:

 1 #使用with打开文件,不需要考虑文件close的问题,rb模式是使用读二进制的模式打开
 2 with open(‘/tmp/go.pdf‘, ‘rb‘) as f:
 3     #获取文件中的内容
 4     data = f.read()
 5
 6 #wb是写的二进制模式打开,当文件存在会覆盖文件已有的内容,文件不存在会创建
 7 with open(‘/tmp/test.bin‘,‘wb‘) as f:
 8     f.write(b‘Hello World‘)
 9
10 #天坑,读取二进制数据的时候,字节字符串和文本字符串的语义差异可能会导致一个潜在的陷阱
11 t = ‘Hello World‘
12 print("t中0索引第一个元素为:", t[0])
13
14 #循环t并打印每个元素
15 for i in t:
16     print(‘循环t中的每个元素:‘, i)
17
18 #坑的地方来了
19 print(‘*‘*30)
20 b = b‘Hello World‘
21 print(‘b中0索引的元素:‘, b[0])
22
23 #循环bytes类型b变量中的每个元素
24 for x in b:
25     print(‘循环b中的每个元素:‘, x)

以上代执行输出的结果为:

t中0索引第一个元素为: H
循环t中的每个元素: H
循环t中的每个元素: e
循环t中的每个元素: l
循环t中的每个元素: l
循环t中的每个元素: o
循环t中的每个元素:
循环t中的每个元素: W
循环t中的每个元素: o
循环t中的每个元素: r
循环t中的每个元素: l
循环t中的每个元素: d
******************************
b中0索引的元素: 72
循环b中的每个元素: 72
循环b中的每个元素: 101
循环b中的每个元素: 108
循环b中的每个元素: 108
循环b中的每个元素: 111
循环b中的每个元素: 32
循环b中的每个元素: 87
循环b中的每个元素: 111
循环b中的每个元素: 114
循环b中的每个元素: 108
循环b中的每个元素: 100

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }

如果你想从二进制模式的文件中读取或写入文本数据,必须确保要进行解码和编码操作。比如:

1 with open(‘/tmp/test.bin‘, ‘rb‘) as f:
2     data = f.read(16)
3     print(‘data的数据类型:‘, type(data))
4     print(‘data的数据:‘, data)
5
6     text = data.decode(‘utf-8‘)
7     print(‘data转码以后的数据类型:‘, type(text))
8     print(‘text的数据:‘, text)

以上代执行输出的结果为:

data的数据类型: <class ‘bytes‘>
data的数据: b‘Hello World‘
data转码以后的数据类型: <class ‘str‘>
text的数据: Hello World

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Helvetica; color: #29556f }

文件不存在才能写入

问题:

  你想像一个文件中写入数据,但是前提必须是这个文件在文件系统上不存在。也就是不允许覆盖已存在的文件内容

解决方案:

  可以在open() 函数中使用x 模式来代替w 模式的方法来解决这个问题。比如:

 1 #如果文件存在,会覆盖内容,如果文件不存在会创建文件并写入内容
 2 with open(‘/tmp/test.bin‘, ‘wt‘) as f:
 3     f.write(‘Hello\n‘)
 4
 5 #如果文件存在,会报异常,否则创建文件并写入内容,如果文件是二进制,使用wb代替
 6 try:
 7     f = open(‘/tmp/test.bin‘, ‘xt‘)
 8 except Exception as e:
 9     print(e)
10 else:
11     f.write(‘Hello\n‘)
12 finally:
13     f.close()

以上代执行输出的结果为:

[Errno 17] File exists: ‘/tmp/test.bin‘

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Helvetica; color: #29556f }

字符串的I/O 操作

问题:

  你想使用操作类文件对象的程序来操作文本或二进制字符串

解决方案:

  使用io.StringIO() 和io.BytesIO() 类来创建类文件对象操作字符串数据。比如:

 1 import io
 2
 3 s = io.StringIO()
 4 print(s.write(‘Hello World\n‘))
 5
 6 print(‘This is a test‘, file=s)
 7
 8 #获取s中的内容
 9 content = s.getvalue()
10 print(‘s中的内容为:‘, content)
11
12 #读取5个长度的内容
13 s = io.StringIO(‘Hello\nWorld\n‘)
14 print("五个字符的内容:")
15 print(s.read(5))
16
17 #读取剩余的内容
18 print("剩余的内容:")
19 print(s.read())

以上代执行输出的结果为:

12
s中的内容为: Hello World
This is a test

五个字符的内容:
Hello
剩余的内容:

World

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }

io.StringIO 只能用于文本。如果你要操作二进制数据,要使用io.BytesIO 类来代替。比如:

1 import io
2 s = io.BytesIO()
3 s.write(b‘binary data‘)
4 data = s.getvalue()
5 print("数据类型:", type(data))
6 print("data的值:", data)

以上代执行输出的结果为:

数据类型: <class ‘bytes‘>
data的值: b‘binary data

注意:

  需要注意的是, StringIO 和BytesIO 实例并没有正确的整数类型的文件描述符。因此,它们不能在那些需要使用真实的系统级文件如文件,管道或者是套接字的程序中使用

  

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }

时间: 2024-11-04 10:49:05

读写文本数据的相关文章

背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 读写文本数据 读写二进制数据 读写流数据 示例1.演示如何读写文本数据FileSystem/ReadWriteText.xaml <Page x:Class="Windows10.FileSystem.ReadWriteText" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x

Python之读写文本数据

知识点不多 普通操作 # rt 模式的 open() 函数读取文本文件 # wt 模式的 open() 函数清除覆盖掉原文件,write新文件 # at 模式的 open() 函数添加write新文件 with open("../../testData","rt",encoding="utf-8") as f : for line in f : print(line) # 写操作默认使用系统编码,可以通过调用 sys.getdefaultenco

基础学习总结(三)--文本数据读写文件、SD卡

简单的文本数据写入文件不需要权限,读写SD卡在4.0版本前需要写权限.在4.0后需要读写权限 布局: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android

IO流-文本IO\读写二进制数据

文本IO 一.简述 OutputStreamWriter类使用选定的编码方式吧Unicode字符流转换为字节流,InputStreamReader类将包含字节的输入流转为可以产生Unicode字符的读入器. 例: (1)InputStreamReader in = new InputStreamReader(System.in)让一个输入读入器可以从控制台读入输入并转换为Unicode (2)InputStreamReader in = new InputStreamReader(new Fil

JDBC学习笔记(三)大文本数据的读写

一.用JDBC向数据库插入大文本数据 String sql = "insert into my_clob values (null, ?)"; ps = conn.prepareStatement(sql); File f = new File("D:\\BaiduNetdiskDownload\\mysql\\jdbc.sql"); Reader reader = new BufferedReader(new FileReader(f)); ps.setChara

JAVASE02-Unit08: 文本数据IO操作 、 异常处理

Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /** * java.io.Ob

JAVASE02-Unit07: 基本IO操作 、 文本数据IO操作

基本IO操作 . 文本数据IO操作 java标准IO(input/output)操作 package day07; import java.io.FileOutputStream; import java.io.IOException; /** * java标准IO(input/output)操作 * 输入流InputStrean:用于从数据源读取数据到程序中 * 输出流OutputStream:用于将数据发送至目标 * * 流划分为:节点流,处理流 * 节点流:又叫做低级流,特点:数据源明确,

MATLAB中文件的读写和数据的导入导出

http://blog.163.com/tawney_daylily/blog/static/13614643620111117853933/ 在编写一个程序时,经常需要从外部读入数据,或者将程序运行的结果保存为文件.MATLAB使用多种格式打开和保存数据.本章将要介绍 MATLAB中文件的读写和数据的导入导出. 13.1 数据基本操作 本节介绍基本的数据操作,包括工作区的保存.导入和文件打开.13.1.1 文件的存储 MATLAB支持工作区的保存.用户可以将工作区或工作区中的变量以文件的形式保

【转】mysql数据库读写分离数据同步

转载请注明来源:mysql数据库读写分离数据同步 mysql数据库读写分离数据同步 我是用了两个xp(一个主的,一个从的)的系统测试成功的,linux系统我也做测试了,没有成功,不过我想我所遇到的问题是同一个问题,xp下的可以成功,linux下的应该也可以成功,稍候会测试,然后更新结果! PS:刚测试了下linux 可以同步成功,主服务器是xp,从服务器是centos,可以成功. 例: A机器 192.168.0.2 B机器 192.168.0.3 两个机器可以ping通,互相访问 先配置主服务