Python 如何将新列表附加到现有CSV文件?

Python 如何将新列表附加到现有CSV文件?,python,csv,python-2.x,Python,Csv,Python 2.x,我已经使用CSV writer从列表中创建了一个CSV文件。我想将另一个通过for循环创建的列表以列方式附加到CSV文件中 创建CSV文件的第一个代码如下: with open("output.csv", "wb") as f: writer = csv.writer(f) for row in zip(master_lst): writer.writerow(row) read ACACCUGGGCUCUCCGGGUACC ACGGCUACCUUCACUGCC

我已经使用CSV writer从列表中创建了一个CSV文件。我想将另一个通过for循环创建的列表以列方式附加到CSV文件中

创建CSV文件的第一个代码如下:

with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    for row in zip(master_lst):
        writer.writerow(row)
read
ACACCUGGGCUCUCCGGGUACC
ACGGCUACCUUCACUGCCACCC
AGGCAGUGUGGUUAGCUGGUUG
read
ACACCUGGGCUCUCCGGGUACC
ACGGCUACCUUCACUGCCACCC
AGGCAGUGUGGUUAGCUGGUUG
sample1
3
3
1
sample2
4
4
1
read                         sample1     sample2
ACACCUGGGCUCUCCGGGUACC         3            4
ACGGCUACCUUCACUGCCACCC         3            4
AGGCAGUGUGGUUAGCUGGUUG         1            1
我使用list
master\lst
创建了CSV文件,输出如下:

with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    for row in zip(master_lst):
        writer.writerow(row)
read
ACACCUGGGCUCUCCGGGUACC
ACGGCUACCUUCACUGCCACCC
AGGCAGUGUGGUUAGCUGGUUG
read
ACACCUGGGCUCUCCGGGUACC
ACGGCUACCUUCACUGCCACCC
AGGCAGUGUGGUUAGCUGGUUG
sample1
3
3
1
sample2
4
4
1
read                         sample1     sample2
ACACCUGGGCUCUCCGGGUACC         3            4
ACGGCUACCUUCACUGCCACCC         3            4
AGGCAGUGUGGUUAGCUGGUUG         1            1
然后,我通过
for
循环创建另一个列表(
ind_lst
),列表的内容必须按列添加到上一步创建的CSV文件中。我使用了以下代码:

with open("output.csv", "ab") as f:
    writer = csv.writer(f)
    for row in zip(ind_lst):
        writer.writerow(row)
 infile= open(sys.argv[1], "r")
 lines = infile.readlines()[1:]
 master_lst = ["read"]
 for line in lines:
  line= line.strip().split(',')
  fourth_field = line [3]
  master_lst.append(fourth_field)
for file in files:
 ind_lst = []   
 if file.endswith('.fa'):
  first = file.split(".")
  first_field = first [0]
  ind_lst.append(first_field)
  fasta= open(file)
  individual_dict= {}
  for line in fasta:
   line= line.strip()
   if line == '':
    continue
   if line.startswith('>'):
    header = line.lstrip('>')
    individual_dict[header]= ''
   else:
    individual_dict[header] += line
 for i in master_lst[1:]:
   a = 0
   if key in individual_dict.keys():
     a = individual_dict[key]
   else:
    a = 0
   ind_lst.append(a)
我得到的结果如下:

with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    for row in zip(master_lst):
        writer.writerow(row)
read
ACACCUGGGCUCUCCGGGUACC
ACGGCUACCUUCACUGCCACCC
AGGCAGUGUGGUUAGCUGGUUG
read
ACACCUGGGCUCUCCGGGUACC
ACGGCUACCUUCACUGCCACCC
AGGCAGUGUGGUUAGCUGGUUG
sample1
3
3
1
sample2
4
4
1
read                         sample1     sample2
ACACCUGGGCUCUCCGGGUACC         3            4
ACGGCUACCUUCACUGCCACCC         3            4
AGGCAGUGUGGUUAGCUGGUUG         1            1
但是,我需要如下列式输出:

with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    for row in zip(master_lst):
        writer.writerow(row)
read
ACACCUGGGCUCUCCGGGUACC
ACGGCUACCUUCACUGCCACCC
AGGCAGUGUGGUUAGCUGGUUG
read
ACACCUGGGCUCUCCGGGUACC
ACGGCUACCUUCACUGCCACCC
AGGCAGUGUGGUUAGCUGGUUG
sample1
3
3
1
sample2
4
4
1
read                         sample1     sample2
ACACCUGGGCUCUCCGGGUACC         3            4
ACGGCUACCUUCACUGCCACCC         3            4
AGGCAGUGUGGUUAGCUGGUUG         1            1
我检查了解决方案,但只能找到按行追加的解决方案,但我需要按列追加:

我使用了
writer.writerows
而不是
writer.writerow
,但我得到了以下错误:

\u csv.Error:应为序列
输出如下:

read
ACACCUGGGCUCUCCGGGUACC
ACGGCUACCUUCACUGCCACCC
AGGCAGUGUGGUUAGCUGGUUG
s                        a   m   p  l  e 1
如您所见,它在每个单元格中打印列表的第一个元素,并在其后以错误终止。我是python的初学者,所以如果有人能帮助解决这个问题,那就太棒了

编辑:

主程序使用以下代码创建:

with open("output.csv", "ab") as f:
    writer = csv.writer(f)
    for row in zip(ind_lst):
        writer.writerow(row)
 infile= open(sys.argv[1], "r")
 lines = infile.readlines()[1:]
 master_lst = ["read"]
 for line in lines:
  line= line.strip().split(',')
  fourth_field = line [3]
  master_lst.append(fourth_field)
for file in files:
 ind_lst = []   
 if file.endswith('.fa'):
  first = file.split(".")
  first_field = first [0]
  ind_lst.append(first_field)
  fasta= open(file)
  individual_dict= {}
  for line in fasta:
   line= line.strip()
   if line == '':
    continue
   if line.startswith('>'):
    header = line.lstrip('>')
    individual_dict[header]= ''
   else:
    individual_dict[header] += line
 for i in master_lst[1:]:
   a = 0
   if key in individual_dict.keys():
     a = individual_dict[key]
   else:
    a = 0
   ind_lst.append(a)
ind_lst是使用以下代码创建的:

with open("output.csv", "ab") as f:
    writer = csv.writer(f)
    for row in zip(ind_lst):
        writer.writerow(row)
 infile= open(sys.argv[1], "r")
 lines = infile.readlines()[1:]
 master_lst = ["read"]
 for line in lines:
  line= line.strip().split(',')
  fourth_field = line [3]
  master_lst.append(fourth_field)
for file in files:
 ind_lst = []   
 if file.endswith('.fa'):
  first = file.split(".")
  first_field = first [0]
  ind_lst.append(first_field)
  fasta= open(file)
  individual_dict= {}
  for line in fasta:
   line= line.strip()
   if line == '':
    continue
   if line.startswith('>'):
    header = line.lstrip('>')
    individual_dict[header]= ''
   else:
    individual_dict[header] += line
 for i in master_lst[1:]:
   a = 0
   if key in individual_dict.keys():
     a = individual_dict[key]
   else:
    a = 0
   ind_lst.append(a)

您需要将
read
sample1
sample2
中的数据合并成一行

假设这些是可编辑的,您可以使用
zip
组合它们:

for row in zip(read, sample1, sample2):
    writer.writerow(row)

实际上,您正在尝试将多个列附加到现有文件中,即使这些新列的数据都存储在单个列表中。最好以不同的方式排列
索引中的数据。但是,由于您还没有演示如何实现这一点,下面的代码与您的问题中的格式一致

由于修改CSV文件很棘手,因为它们实际上只是文本文件,因此只需使用合并的数据创建一个新文件,然后在删除原始文件后重命名该文件以匹配原始文件(您现在已收到警告)

创建后进行更新的文件内容:

read,sample1,sample2
ACACCUGGGCUCUCCGGGUACC,3,4
ACGGCUAccuCuGCCACCC,3,4
aggcaguguguguguguggug,1,1

我想样本1和样本2不适合。示例1和示例2是通过for循环创建的列表。列表ind_lst应在每个for循环后变为空,以便容纳要创建和追加的新列表。这个问题还有其他解决方案吗?@rex没有。如果需要多列,您必须为一行创建一个iterable。请提出您的问题并添加定义
master_iist
的代码,更重要的是,为
for
循环创建
ind_lst
@martineau:Hi martineau,我已经更新了你的信息requested@martineau当前位置我正在查看答案部分,没有看到您的上述评论。很抱歉,我没有清楚地解释我的问题:(ind_lst是为当前工作目录中扩展名为.fa的每个文件创建的,ind_lst的内容必须以列方式追加到输出CSV文件中。因此,所有的.fa文件都会被读取,ind_lst会被创建并以列方式追加。在这个示例中,我提供了2个.fa文件,用于通过for循环whic创建ind_lst。)h必须按列添加。如果您有任何问题,并且我的问题仍然不清楚,请告诉我。雷克斯:好的举措。但是,我厌倦了等待您这样做,并根据当时的内容尽我所能回答了您的问题。您可能可以稍微简化我回答中的内容,即重新排列代码的部分>ind_lst
-通过创建
ind_lst
,使其成为一个列表列表,其中每个子列表中的第n个元素来自每个fasta文件。如果您不知道如何做,那么是时候问另一个问题了。雷克斯:谢谢。对于一个不相关的问题,可以帮助您从多个fasta文件中创建
ind_lst
将同时打开并被读取(提示)。