python - 使用 python 合并两个电子表格 - 新工作表中的列源在源文件之间交替

标签 python python-2.7 csv

我想编写一个Python代码来合并两个.csv格式的电子表格,以便新工作表中的第一列来自任一源工作表,而所有其他新列都以交替顺序从源工作表派生。

这是一个示例(以电子表格格式显示):

来源1:

    (A) name 1  (A) name 2  (A) name 3  (A) name 4
class 1             
class 2             
class 3             
class 4     

来源2:

    (B) name 1  (B) name 2  (B) name 3  (B) name 4
class 1             
class 2             
class 3             
class 4     

期望的结果:

    (A) name 1  (B) name 1  (A) name 2  (B) name 2  (A) name 3  (B) name 3  (A) name 4  (B) name 4
class 1                             
class 2                             
class 3                             
class 4                             

编辑:

根据要求,这是我的数据示例(以 .csv 格式显示)

表 1:

,(F) Abies amabilis,(F) Abies balsamea,(F) Abies bifolia,(F) Abies concolor,(F) Abies fraseri,(F) Abies grandis,(F) Abies lasiocarpa,(F) Abies magnifica,(F) Abies procera,(F) Larix decidua,(F) Larix laricina,(F) Picea abies,(F) Picea engelmannii,(F) Picea glauca,(F) Picea mariana,(F) Picea pungens,(F) Picea sitchensis,(F) Pinus albicaulis,(F) Pinus aristata,(F) Pinus attenuata,(F) Pinus banksiana,(F) Pinus cembroides,(F) Pinus clausa,(F) Pinus contorta,(F) Pinus coulteri,(F) Pinus echinata,(F) Pinus edulis,(F) Pinus elliottii,(F) Pinus engelmannii,(F) Pinus flexilis,(F) Pinus halepensis,(F) Pinus jeffreyi,(F) Pinus lambertiana,(F) Pinus leiophylla,(F) Pinus longaeva,(F) Pinus monophylla,(F) Pinus monticola,(F) Pinus mugo,(F) Pinus muricata,(F) Pinus palustris,(F) Pinus ponderosa,(F) Pinus pumila,(F) Pinus pungens,(F) Pinus quadrifolia,(F) Pinus radiata,(F) Pinus resinosa,(F) Pinus rigida,(F) Pinus serotina,(F) Pinus strobiformis,(F) Pinus strobus,(F) Pinus sylvestris,(F) Pinus taeda,(F) Pinus thunbergii,(F) Pinus torreyana,(F) Pinus virginiana,(F) Pseudotsuga macrocarpa,(F) Pseudotsuga menziesii,(F) Tsuga canadensis,(F) Tsuga heterophylla,(F) Tsuga mertensiana
48,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
52,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
58,0,0,0,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0

表 2:

,(M) Abies amabilis,(M) Abies balsamea,(M) Abies bifolia,(M) Abies concolor,(M) Abies fraseri,(M) Abies grandis,(M) Abies lasiocarpa,(M) Abies magnifica,(M) Abies procera,(M) Larix decidua,(M) Larix laricina,(M) Picea engelmannii,(M) Picea glauca,(M) Picea mariana,(M) Picea pungens,(M) Picea sitchensis,(M) Pinus albicaulis,(M) Pinus aristata,(M) Pinus attenuata,(M) Pinus banksiana,(M) Pinus cembroides,(M) Pinus clausa,(M) Pinus contorta,(M) Pinus coulteri,(M) Pinus echinata,(M) Pinus edulis,(M) Pinus elliottii,(M) Pinus engelmannii,(M) Pinus flexilis,(M) Pinus halepensis,(M) Pinus jeffreyi,(M) Pinus lambertiana,(M) Pinus leiophylla,(M) Pinus longaeva,(M) Pinus monophylla,(M) Pinus monticola,(M) Pinus muricata,(M) Pinus palustris,(M) Pinus ponderosa,(M) Pinus pumila,(M) Pinus pungens,(M) Pinus quadrifolia,(M) Pinus radiata,(M) Pinus resinosa,(M) Pinus rigida,(M) Pinus serotina,(M) Pinus strobiformis,(M) Pinus strobus,(M) Pinus sylvestris,(M) Pinus thunbergii,(M) Pinus torreyana,(M) Pinus virginiana,(M) Tsuga canadensis,(M) Tsuga heterophylla,(M) Tsuga mertensiana
48,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
52,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1
58,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

我是一个非常新手的编码员,所以我所尝试的东西几乎不值得一提。然而,我最初认为也许我可以使用 zip 来链接工作表,这适用于列表。我还想也许我可以做类似的事情

for line in "Source 1.csv" and row in "Source 2.csv:
        #then split the lines into lists and write to an outfile using list indices

首先,我非常感谢您的帮助!

最佳答案

我认为使用 zip() 的做法是正确的,但它有点棘手,因为它从每个源文件返回一个值对列表。下面通过展平嵌套序列来处理这个问题。所以我认为以下内容应该有效。您还可以使用 zip() (或 itertools.izip())并行迭代两个 csv 文件的行。

注意,在处理该格式的文件时,我通常会尝试使用 csv 模块,因为它通常可以节省大量时间和麻烦,而且相当易于使用。

import csv
import itertools

with open("Source 1.csv", "rb") as source1, \
     open("Source 2.csv", "rb") as source2, \
     open("merged_output.csv", "wb") as merged_output:

    source1_reader = csv.reader(source1, delimiter=',')
    source2_reader = csv.reader(source2, delimiter=',')
    merged_output_writer = csv.writer(merged_output, delimiter=',')

    for row1, row2 in itertools.izip(source1_reader, source2_reader):
        merged_output_writer.writerow(
            tuple(itertools.chain.from_iterable(itertools.izip(row1, row2))))

关于python - 使用 python 合并两个电子表格 - 新工作表中的列源在源文件之间交替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27969332/

相关文章:

python - 按列组合多个 csv 文件,并以标题作为文件名

python - 带回调的扭曲模拟计时器

python - 无法使用 Pip 安装任何包

python - 了解 Python 解释器 -t (-tt) 选项

postgresql - 为什么 psycopg2 和 pyodbc 以不同方式连接到数据库?我如何翻译连接?

python - Django 上的正则表达式不起作用

python - 用名称替换标题

c# - CSV 解析包含双引号和逗号的字符串

python - 从记录中用 Pandas 索引几个 csv 文件?

bash - mongoexport 最近小时数来自 mongodb 的数据