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文件


图片.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])

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


图片.png
    data = pandas.read_csv('data_set/australian.csv')
    print(data)
图片.png

再看一个例子吧


图片.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'])

结果如下:


图片.png

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

补充:感谢评论区的大佬给出了一种更简单的方法,就是用pandas自带的方法,这里,我直接在deal_data上面更改了。
程序如下:

def deal(self):
    data = pandas.read_table(self.file_path, sep = self.separator, names = self.list_name)
    _path, shot_name, extension = self.gain_extension()
    '''生成的csv文件的完整路径'''
    new_path = _path + '/' + shot_name + '.csv'
    data.to_csv(new_path, index = 0)

read_table和to_csv都有一些参数,这里简单介绍下部分参数

read_table:
path_or_buf : str或文件句柄,默认为无
sep : str,默认','
header : bool或str列表,默认为True
index : bool,默认为True
mode : str,Python写入模式,默认为“ w”。
encoding : str,可选
表示输出文件中使用的编码的字符串,默认为'utf-8'。

to_csv:
filepath_or_buffer : str,路径对象或类似文件的对象
sep : str,默认'\ t'(制表位)
header : int,int列表,默认为'infer'
行号(用作列名)以及数据的开头。默认行为是推断列名:如果未传递名称,则行为与相同,header=0并且从文件的第一行推断出列名;如果显式传递列名,则行为与相同 header=None。显式传递header=0以能够替换现有名称。
names : 类 数组,可选,要使用的列名列表。如果文件不包含标题行,则应显式传递header=None。此列表中不允许重复。

也不是说第一种方法就没有意义了,如果txt文件中有一些其他情况,如:


image.png

如果使用第二种方法,就会是这样了:


image.png

第一种方法可以去除每一行的 " 字符,对”不完美“的txt文件已有它的作用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容