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

时间:2018-04-18 11:58:11

标签: 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 |    |    |    | 1  |   |
|   |          |    |   |   |    |    |    |    |   |

CSV 2

|   | 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(open("C:\\Users\\gomathis\\Downloads\\To csv\\FinalTR.csv",'w')) print(filenames)

for f in filenames:

  rd = csv.reader(open(f,'r', newline=''))
  next(rd)
  for row in rd:
      wf.writerow(row)

最新结果: 修改代码后我得到了以下结果。我没有像状态P,F,B等那样得到索引。请参考最新结果。

| 0 | P0 Dry Run - 15/02/18 | 154 | 1 | | | 1 | | | 5 | |---|--------------------------------|-----|---|---|---|---|---|---|---| | | | | | | | | | | | | 0 | Sanity in FRA Prod - 15/02/18 | 14 | | | | | | 1 | | | | | | | | | | | | | | 1 | Sanity in SYD Gamma - 15/02/18 | 13 | | 1 | | | | 1 | |

2 个答案:

答案 0 :(得分:1)

您需要在循环中的csv文件上调用csv reader方法。

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

答案 1 :(得分:0)

import csv
import glob

dest_fname = "C:\\Users\\gomathis\\Downloads\\To csv\\FinalTR.csv"
src_fnames = glob.glob("C:\\Users\\gomathis\\Downloads\\To csv\\*.csv")
with open(dest_fname, 'w', newline='') as f_out:
    writer = csv.writer(fout)
    copy_headers = True
    for src_fname in src_fnames:
        # don't want to overwrite destination file
        if src_fname.endswith('FinalTR.csv'):
            continue
        with open(src_fname, 'r', newline='') as f_in:
            reader = csv.reader(f_in)
            # header row is copied from first csv and skipped on the rest
            if copy_headers:
                copy_headers = False
            else:
                next(reader) # skip header 
            for row in reader:
                writer.writerow(row)

注意:

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