如何使用python从两个csv文件中获取值并将其放入单个csv文件中?

如何使用python从两个csv文件中获取值并将其放入单个csv文件中?,python,csv,Python,Csv,我想从两个csv文件中获取值,并将其放入一个csv文件中 请参考这两个csv文件中的数据: CSV 1: | | Status | P | F | B | IP | NI | NA | CO | U | |---|----------|----|---|---|----|----|----|----|---| | 0 | Sanity 1 | 14 | | | | | | 1 | | | 1 | Sanity 2 | 13 | | 1 | |

我想从两个csv文件中获取值,并将其放入一个csv文件中

请参考这两个csv文件中的数据:

CSV 1

|   | Status   | P  | F | B | IP | NI | NA | CO | U |
|---|----------|----|---|---|----|----|----|----|---|
| 0 | Sanity 1 | 14 |   |   |    |    |    | 1  |   |
| 1 | Sanity 2 | 13 |   | 1 |    |    |    | 1  |   |
|   |          |    |   |   |    |    |    |    |   |
|   | Status     | P   | F | B | IP | NI | NA | CO | U |
|---|------------|-----|---|---|----|----|----|----|---|
| 0 | P0 Dry Run | 154 | 1 |   |    | 1  |    |    | 5 |
|   |            |     |   |   |    |    |    |    |   |
|   |            |     |   |   |    |    |    |    |   |
CSV 2

|   | Status   | P  | F | B | IP | NI | NA | CO | U |
|---|----------|----|---|---|----|----|----|----|---|
| 0 | Sanity 1 | 14 |   |   |    |    |    | 1  |   |
| 1 | Sanity 2 | 13 |   | 1 |    |    |    | 1  |   |
|   |          |    |   |   |    |    |    |    |   |
|   | Status     | P   | F | B | IP | NI | NA | CO | U |
|---|------------|-----|---|---|----|----|----|----|---|
| 0 | P0 Dry Run | 154 | 1 |   |    | 1  |    |    | 5 |
|   |            |     |   |   |    |    |    |    |   |
|   |            |     |   |   |    |    |    |    |   |
代码: 我尝试了以下代码:

filenames = glob.glob ("C:\\Users\\gomathis\\Downloads\\To csv\\*.csv")
wf = csv.writer(open("C:\\Users\\gomathis\\Downloads\\To 
csv\\FinalTR.csv",'wb'))

for f in filenames:
    rd = csv.writer(open(f,'r'))
    next(rd)
    for row in rd:
        wf.writerow(row)
实际结果: 在尝试上面的代码时,我没有从上面的CSV文件中获取值

预期结果: 我需要两个文件需要添加到一个单一的csv文件,并保存在本地

修改代码:

filenames=glob.glob(“C:\\Users\\gomathis\\Downloads\\To csv\\*.csv”)
wf=csv.writer(打开(“C:\\Users\\gomathis\\Downloads\\To csv\\FinalTR.csv”,'w'))
打印(文件名)

对于文件名中的f:

  rd = csv.reader(open(f,'r', newline=''))
  next(rd)
  for row in rd:
      wf.writerow(row)
最新结果: 在修改代码后,我得到了以下结果。我没有得到状态P、F、B等索引。请参考最新结果


|0 | P0干运行-18年2月15日| 154 | 1 | | 1 | | 5|
|---|--------------------------------|-----|---|---|---|---|---|---|---|
|   |                                |     |   |   |   |   |   |   |   |
|0 | FRA产品的健全性-18年2月15日| 14 | | | | | | 1 ||
|   |                                |     |   |   |   |   |   |   |   |
|1 | SYD Gamma中的精神卫生-15/02/18 | 13 | | 1 | | | 1 ||

您需要在循环中的csv文件上调用csv读取器方法

rd = csv.reader(open(f,'r'))
注:

  • open()
    与自动关闭文件的语句放在一起
  • 从文件模式中删除了二进制标志,并添加了
    newline='
    ,这是在Python 3中传递到
    csv.reader
    csv.writer
    的文件所需的
  • 对于您正在读取的文件,已从
    csv.writer
    更改为
    csv.reader
  • 添加了一个
    copy_headers
    标志,以允许从第一个文件复制头,并跳过从之后的任何文件复制头
  • 检查源文件名,当它与目标文件名匹配时跳过它

您使用的是Python 2还是Python 3?如果使用Python 2,那么您打开的用于读取的csv文件应该是
open(f,'rb')
。如果Python 3,
打开(f,'r',换行=“”)
。写作遵循同样的模式。对csv文件进行这种特殊处理的原因是csv模块需要绕过Python的通用换行符支持。您确定您的glob与您的文件名匹配吗?在循环之前检查打印文件名。@StevenRumbalski对延迟响应表示抱歉。我在打印时得到了这个结果,然后将其传递到循环
['C:\\Users\\gomathis\\Downloads\\To csv\\FinalTR.csv','C:\\Users\\gomathis\\Downloads\\To csv\\file1.csv','C:\\Users\\gomathis\\Downloads\\To csv\\file2.csv'.
您使用的是Python 2还是Python 3?在
FinalTR.csv
中会出现什么结果?任何东西正如@Ank所指出的,当您应该使用
rd=csv.writer(open(f,'r'))
时,您应该使用
rd=csv.reader(open(f,'r'))
。你需要一个
csv.reader
而不是
csv.writer
。此外,由于目标文件存在于该列表中,您应该跳过读取它<代码>如果f.endswith('FinalTR.csv'):继续谢谢。但我有另一个澄清,如果我想从包含3个以上csv文件的文件夹中只选择两个csv文件,该怎么办。@gomathisubramanian:这两个名称有什么特别之处?你是如何手动知道差异的?第1周和第2周,这些是我有数据的文件,可以作为一个单独的file@gomathisubramanian:您可以将
glob()
参数的结尾从
'*.csv'
更改为
'week\[1-2].csv'
。或
“第1周至第9周”
。使用特定的glob,如果src_fname.endswith('FinalTR.csv'):继续,您可以删除行
,谢谢兄弟。这是有用的。