python-轻松将txt文件内容写入csv文件

很多时候,我们实际得到的数据离我们需要的数据总是有着一定的差距,这就需要进行数据清洗。python的pandas在数据处理方面有着巨大的优势,今天我们的任务是将txt文件的内容写入到csv文件中


前言

网上的教程有很多,然鹅,本人在实际处理这个问题时,却没有能够完美解决问题的教程。就其原因,有的是教程本身“误人子弟”,也有的是自己的实际情况与教程中的不符合罢了。
也许,这个过程看似简单,但是实际上会有各种各样的问题,比如说编码,写入到csv文件的格式与预期不一致,程序不具有普遍性等等问题
那么现在,我就给出一个比较”通用的“方法吧,能够尽可能处理多种问题

需要的参数有文件路径,txt文件内容之间的分隔符,txt文件内每列的列名(可不需要,但是有的话,便于阅读)

相关的注意事项,我都在程序中以注释的形式给出了
展现程序:

# -*- coding: utf-8 -*-

import os
import csv
import pandas

class BeforeTest(object):
    def __init__(self, path, separator, list_name):
        """
        :param path: 文件路径txt文件
        :param separator: 文件分隔符
        :param list_name : 列名
        """
        '''文件路径'''
        self.file_path = path
        '''文件分隔符'''
        self.separator = separator
        '''列名'''
        self.list_name = list_name
        '''函数'''
        self.deal_data()

    def gain_extension(self):
        """
        :return:
        @file_path : 返回文件路径
        @shot_name : 返回文件名
        @extension : 返回文件后缀
        """
        file_path, temp_filename = os.path.split(self.file_path)
        shot_name, extension = os.path.splitext(temp_filename)
        return file_path, shot_name, extension

    def deal_data(self):
        _path, shot_name, extension = self.gain_extension()
        '''生成的csv文件的完整路径'''
        new_path = _path + '/' + shot_name + '.csv'
        new_file = open(new_path, 'w+', newline='')
        writer = csv.writer(new_file)
        '''先将列名写入'''
        writer.writerow(self.list_name)
        data = open(self.file_path)
        lines = data.readlines()
        for index in range(len(lines)):
            lines[index] = lines[index].strip('\n')
            lines[index] = lines[index].split(self.separator)
            writer.writerow(lines[index])
        data.close()
        new_file.close()
        self.file_path = new_path

下面来看下实际效果:
这是一个txt文件


python-轻松将txt文件内容写入csv文件_第1张图片
图片.png

运行程序:


if __name__ == '__main__':
    '''改成你自己的文件路径
    生成的csv文件是与txt文件同名同目录'''
    path = 'data_set/australian.txt'
    test = BeforeTest(path,
                      ' ', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])

这里为了简便起见,列名用了数字表示。
看看结果吧


python-轻松将txt文件内容写入csv文件_第2张图片
图片.png
    data = pandas.read_csv('data_set/australian.csv')
    print(data)
python-轻松将txt文件内容写入csv文件_第3张图片
图片.png

再看一个例子吧


python-轻松将txt文件内容写入csv文件_第4张图片
图片.png

来自于《机器学习实战》中knn的例子

运行程序:

if __name__ == '__main__':
    path = 'G:/桌面文档/codes/Machine-Learning-master/Machine-Learning-master/kNN/2.海伦约会/datingTestSet.txt'
    # path = 'data_set/australian.txt'
    test = BeforeTest(path,
                      '\t', ['a', 'b', 'c', 'd'])

结果如下:


python-轻松将txt文件内容写入csv文件_第5张图片
图片.png

BeforeTest类的构造参数有三个,path: 文件路径txt文件,separator: 文件分隔符,list_name : 列名
基本上有了这三个参数,就可以将txt文件转换为csv文件了

你可能感兴趣的:(python-轻松将txt文件内容写入csv文件)