Python read and write files

read data from file

read the entire file

It is assumed here that there is a text file named 'pi_digits.txt' in the current directory, and the data in it is as follows:

3.1415926535
8979323846
2643383279
  • 1
  • 2
  • 3
with open('pi_digits.txt') as f: # 默认模式为‘r’,只读模式
    contents = f.read() # 读取文件全部内容
    print contents # 输出时在最后会多出一行(read()函数到达文件末会返回一个空字符,显示出空字符就是一个空行)
    print '------------'
    print  contents.rstrip() # rstrip()函数用于删除字符串末的空白
  • 1
  • 2
  • 3
  • 4
  • 5
3.1415926535
8979323846
2643383279

------------
3.1415926535
8979323846
2643383279
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

read line by line

Reading data line by line can be achieved by looping:

with open('pi_digits.txt') as f:
    for line1 in f:
        print line1 # 每行末尾会有一个换行符
    print '------------'
    for line2 in f:
        print line2.rstrip() # 此时文件已经读完,line2指向文本末尾,因此不会有输出
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3.1415926535

8979323846

2643383279

------------
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

When reading a file, it is equivalent to having a pointer to record the read position. Wherever the data is read, the pointer points to which side. When continuing to read the data, it will continue to read from this position, so the second loop in the above code The output is empty. The above code is slightly modified as follows:

with open('pi_digits.txt') as f:
    for line1 in f:
        print line1
    print '------------'

with open('pi_digits.txt') as f: # 需要重新打开文本进行读取
    for line2 in f:
        print line2.rstrip() # 删除字符串末尾的空白
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
3.1415926535

8979323846

2643383279

------------
3.1415926535
8979323846
2643383279
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

The above code is equivalent to closing the file and reopening it for reading after the first reading. You can also use the readline() function to read data line by line, as follows:

with open('pi_digits.txt') as f: 
    # readline()每一次读取一行数据,并指向该行末尾
    line1 = f.readline() # 读取第一行数据(此时已经指向第一行末尾)
    line2 = f.readline() # 从上一次读取末尾开始读取(第二行)

    print line1.rstrip()
    print line2.rstrip()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
3.1415926535
8979323846
  • 1
  • 2
  • 3

Sometimes we want to read all the data at once and store them separately for subsequent operations. Of course, the above loop can be used, but python provides a simpler method readlines():

with open('pi_digits.txt') as f: 
    lines = f.readlines() # 读取文本中所有内容,并保存在一个列表中,列表中每一个元素对应一行数据
print lines # 每一行数据都包含了换行符

print '------------'
for line in lines:
    print line.rstrip()   
print '------------'
pi_str = '' # 初始化为空字符
for line in lines:
    pi_str += line.rstrip() #字符串连接
print pi_str
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
['3.1415926535\n', '8979323846\n', '2643383279\n']
------------
3.1415926535
8979323846
2643383279
------------
3.141592653589793238462643383279
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

write data to file

There are several different modes for writing data, the most commonly used are w', 'a', which respectively mean erasing the original data and then writing and writing the data after the original data:

filename = 'write_data.txt'
with open(filename,'w') as f: # 如果filename不存在会自动创建, 'w'表示写数据,写之前会清空文件中的原有数据!
    f.write("I am Meringue.\n")
    f.write("I am now studying in NJTECH.\n")
  • 1
  • 2
  • 3
  • 4

At this point, a 'write_data.txt' text file will be created in the current path, and the data will be written to the file as follows:

I am Meringue.
I am now studying in NJTECH.
  • 1
  • 2

Let's continue to add new data to the file:

with open(filename,'a') as f: # 'a'表示append,即在原来文件内容后继续写数据(不清楚原有数据)
    f.write("I major in Machine learning and Computer vision.\n")
  • 1
  • 2

The content of the file at this time is:

I am Meringue.
I am now studying in NJTECH.
I major in Machine learning and Computer vision.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324644120&siteId=291194637