【发布时间】:2018-09-28 15:55:49
【问题描述】:
我想从两个 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 | |
【问题讨论】:
-
Merging 2 csv files的可能重复
-
您使用的是 Python 2 还是 Python 3?如果是 Python 2,你打开的 csv 文件应该是
open(f, 'rb')。如果是 Python 3,open(f, 'r', newline='')。写作遵循相同的模式。对 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.reader(open(f,'r'))时使用rd = csv.writer(open(f,'r'))。在那个地方你需要csv.reader而不是csv.writer。此外,由于您的目标文件存在于该列表中,您应该跳过阅读它。if f.endswith('FinalTR.csv'):continue