python选几列写入新csv,python选指定列

发布时间:2022-11-18

本文目录一览:

  1. 如何用python把list里的数据写入csv?
  2. Python怎么把循环得到的结果按照列依次写入到一个csv文件中
  3. python对多个csv文件里提取指定列汇总到一个新生成的csv文件
  4. 利用Python如何将数据写到CSV文件中
  5. python 读取多个csv文件中某一列,并生成一个新csv文件

如何用python把list里的数据写入csv?

最常用的一种方法,利用pandas包

import pandas as pd
# 任意的多组列表
a = [1, 2, 3]
b = [4, 5, 6]
# 字典中的key值即为csv中列名
dataframe = pd.DataFrame({'a_name': a, 'b_name': b})
# 将DataFrame存储为csv,index表示是否显示行名,default=True
dataframe.to_csv("test.csv", index=False, sep=',')

输出结果如下:

a_name  b_name
0       1       4
1       2       5
2       3       6

同样pandas也提供简单的读csv方法:

import pandas as pd
data = pd.read_csv('test.csv')

会得到一个DataFrame类型的data。 另一种方法用csv包,一行一行写入:

import csv
# python2可以用file替代open
with open("test.csv", "w") as csvfile:
    writer = csv.writer(csvfile)
    # 先写入columns_name
    writer.writerow(["index", "a_name", "b_name"])
    # 写入多行用writerows
    writer.writerows([[0, 1, 3], [1, 2, 3], [2, 3, 4]])

输出结果如下:

index  a_name  b_name
0       1       3
1       2       3
2       3       4

读取csv文件用reader:

import csv
with open("test.csv", "r") as csvfile:
    reader = csv.reader(csvfile)  # 这里不需要readlines
    for line in reader:
        print(line)

Python怎么把循环得到的结果按照列依次写入到一个csv文件中

我改了一下你的代码,实测是可以从 a.csv复制到 b.csv中

import csv
def foo():
    with open('a.csv', 'r') as f:
        reader = csv.DictReader(f)
        rows = [row for row in reader]
    if not rows:
        return
    with open('b.csv', mode='w', newline='', errors='ignore') as f2:
        for index, row in enumerate(rows):
            if index == 0:
                f_csv = csv.DictWriter(f2, fieldnames=list(row.keys()))
                f_csv.writeheader()
            f_csv.writerow(row)
if __name__ == '__main__':
    foo()

python对多个csv文件里提取指定列汇总到一个新生成的csv文件

#!/usr/bin/env python
# coding: utf-8
import os
import re
def parserln(ln, patt):
    """用给定的正则表达式解析行"""
    matched = patt.match(ln)
    if matched:
        return matched.groupdict()
def getdata(filename, parser, callback=None):
    """用指定的解析方法parser解析指定文件,
       用callback进行数据加工过的数据列表
    """
    with open(filename, 'rt') as handle:
        return map(
            callback,
            filter(None, map(parser, handle))
        )
def storage(filename, dataserial, spliter=','):
    """将数据序列按行存储到指定文件,
       每一序列元素间用指定的字符分割
    """
    with open(filename, 'wt') as handle:
        handle.writelines([
            "%s\n" % (spliter.join(map(str, item)))
            for item in dataserial
        ])
if __name__ == "__main__":
    patt = re.compile(
        r"""^
        (?P<month>\d+),
        (?P<amount>\d+),
        (?P<usage>\d+)
        \s*$""",
        re.I | re.U | re.X)
    datapath = 'datasource'
    # datasource下所有存在"usage.csv"文件的子目录
    subpaths = [
        os.path.join(datapath, path)
        for path in os.listdir(datapath)
        if (os.path.isdir(os.path.join(datapath, path))
            and os.path.exists(
                os.path.join(datapath, path, "usage.txt")
            )
        )
    ]
    storage(
        'store.csv',
        zip(*map(
            lambda path: getdata(
                os.path.join(path, "usage.csv"),
                # 解析方法为用patt解析行
                parser=lambda ln: parserln(ln, patt),
                # 数据加工方法是取出"amount"转成整数
                callback=lambda x: int(x["amount"]),
            ),
            subpaths))
        )

输出结果如下:

4234,5234
3523,4523
4352,5352
4792,5792
4823,6823
5093,6093
4743,6743
5152,7152
4932,6932
4993,6993
4999,6999
5052,7052

利用Python如何将数据写到CSV文件中

如果你的数据是列表格式,可以使用一个迭代器,将数据写入文件,同时添加必要的分隔符以构成csv文件。 如果数据是字典格式,需要考虑使用换行符或者其他特殊符号来分割每个字典元素(包括键和值)。键和值可以考虑使用和之前不重复的分隔符进行分割。 这样就构成了一个csv文件(csv使用分隔符分割值的文件) 操作方法如下:

  1. 使用读写追加的方式打开csv文件。
  2. 找到csv文件的结尾。
  3. 在结尾使用和之前csv使用的分割相同的格式进行数据添加。
  4. 关闭文件

python 读取多个csv文件中某一列,并生成一个新csv文件

csv文件应该是用逗号分隔得才对,否则怎么算作是csv文件。楼主你开玩笑吧。否则你这只是一个普通的文本文件。如果是真正的csv文件,我只说一点,python里面有csv模块,专门处理csv文件。如果是空格分割应该也可以,建议你,看一下python的csv模块的API,蛮简单的代码,其实如果不用的话自己写也可以。不是很复杂。代码片段如下:

def deal_file(file_in, file_out):
    with open(file_in, 'r') as f_in:
        with open(file_out, 'w') as f_out:
            for line in f_in:
                f_out.write(line.split(' ')[2] + '\n')

之后你可以将所有的输入文件放到一个列表里面,进行迭代调用这个函数就可以了。