ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python:基于现有列将列添加到CSV文件

2019-12-02 07:56:19  阅读:268  来源: 互联网

标签:csv python


我已经写了识别和解析所要查找的值所需的内容,我需要帮助将具有已解析的值的列写入csv文件(或新的csv文件).这是我想要做的一些伪代码/有些逼真的Python代码:

# Given a CSV file, this function creates a new CSV file with all values parsed
def handleCSVfile(csvfile):
  with open(csvfile, 'rb') as file:
    reader = csv.reader(file, delimiter=',', lineterminator='\n')
    for row in reader:
        for field in row:
          if isWhatIWant(field):
            parsedValue = parse(field)
            # write new column to row containing parsed value

我已经编写了isWhatIWant和parse函数.如果我需要编写一个全新的csv文件,那么我不确定如何同时打开这两个文件以及如何从一个文件读取另一个文件.

解决方法:

我会这样我猜想isWhatIWant()应该替换掉原位字段.

import csv

def handleCSVfile(infilename, outfilename):
    with open(infilename, 'rb') as infile:
        with open(outfilename, 'wb') as outfile:
            reader = csv.reader(infile, lineterminator='\n')
            writer = csv.writer(outfile, lineterminator='\n')

            for row in reader:
                for field_index, field in enumerate(row):
                    if isWhatIWant(field):
                        row[field_index] = parse(field)
                writer.writerow(row)

这种模式经常发生,导致行很长.有时,将打开逻辑和文件逻辑分解为一个不同的函数可能会有所帮助,如下所示:

import csv

def load_save_csvfile(infilename, outfilename):
    with open(infilename, 'rb') as infile:
        with open(outfilename, 'wb') as outfile:
            reader = csv.reader(infile, lineterminator='\n')
            writer = csv.writer(outfile, lineterminator='\n')

            read_write_csvfile(reader, writer)

def read_write_csvfile(reader, writer)
    for row in reader:
        for field_index, field in enumerate(row):
            if isWhatIWant(field):
                row[field_index] = parse(field)
        writer.writerow(row)

这使代码模块化,从而使您更轻松地更改逻辑上彼此独立地处理文件和格式的方式.

其他提示:

>不要命名变量文件,因为这是内置函数.当您最不希望看到这些名称时,将这些名称隐藏起来会刺痛您.
> delimiter =’,’是默认设置,因此您无需显式指定它.

标签:csv,python
来源: https://codeday.me/bug/20191202/2087054.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有