txt转csv&文件内容修改

宋正兵 on 2021-11-17

原本打算将场景一并写下来,记录思考的过程,想了想查阅的过程中并不会这么有耐心,还是就事论事,用了什么方法解决了什么问题。

txt转换为csv文件

直接修改文件名后缀的方式可能会导致数据格式错误问题。

txt文件转换为csv文件需要确保txt文件中数据格式正确。当前txt文件中数据格式为:

1
2
3
4
5
6
A类
1,2,3
1,2,3
B类
4,5,6
4,5,6

直接使用read_csv,以csv格式、指定分隔符为,、读取txt文件,再用to_csv去以csv格式存储。此时会导致第2、3列的数据丢失。代码如下:

1
2
df = pd.read_csv('123.txt', header = None)
df.to_csv('new_123.txt', encoding='utf-8', header = None, index = None)

实验发现是由于每一行末尾缺少一个,逗号分隔符导致【这里留个疑问,到底是什么原因产生了这种现象】。于是可以得出我们想要的数据格式为:

1
2
3
4
5
6
A类,
1,2,3,
1,2,3,
B类,
4,5,6,
4,5,6,

即行之间通过换行间隔,数据和数据之间用分隔符,间隔,但是末尾的数据和换行符之间也需要一个分隔符,

所以我们想用上述方法将txt转换为csv文件之前,需要对txt文件的内容进行修改。

txt文件内容修改

python提供了读取和写入两种操作文件的方法,我打算将每一行数据读出后进行修改,存放到一个缓存列表当中,最后将缓存列表写入到一个新文件,这样就修改完成了。思路明白了那么我们直接来写这部分的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 打开文件,增加encoding参数是处理乱码问题
f = open('123.txt', 'r+', encoding='UTF-8')
# 新文件
new_f = open('new_123.txt', 'w+')
# 缓存列表
buffer_list = []
# 取每一行,进行修改后添加到缓存列表
for line in f:
line = line.replace('\n', ',\n')
buffer_list.append(line)
# 将缓存列表写入新文件
new_f.writelines(buffer_list)
# 关闭文件(必须操作
f.close()
new_f.close()

效果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
==========123.txt============
A类
1,2,3
1,2,3
B类
4,5,6
4,5,6
==========new_123.txt============
A类,
1,2,3,
1,2,3,
B类,
4,5,6,
4,5,6,