python - 转换整个 CSV,而不仅仅是一列
问题描述
我有一个小的 python 脚本(基于我下载的开源脚本),它接受一个输入 csv 文件,我希望脚本以数组数组的形式吐出一个 plist,每行一个数组文件。这是脚本:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
import csv
args = sys.argv[1:]
if args:
if(len(args) == 1):
infile = args[0]
outfile = infile.replace(".csv", ".plist")
plisttype = 'array'
if(open(os.path.abspath(outfile),'w')):
if(os.path.isfile(infile)):
data = csv.reader(open(infile))
output = open(os.path.abspath(outfile),'w')
output.write('<?xml version="1.0" encoding="UTF-8"?>\n')
output.write('<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n')
output.write('<plist version="1.0">\n')
output.write('<array>\n')
for row in data:
rowList = [elem.strip().split(',') for elem in row]
for i in rowList:
output.write('\t<string>' + i.strip() + '</string>\n')
output.write('</array>\n')
output.write('</plist>')
output.close()
print os.path.basename(os.path.abspath(outfile)) + ' created successfully'
else:
print infile + ' could not be opened'
exit()
else:
print outfile + ' is not writable'
exit()
else:
print '\ncsv2array usage:\npython csv2array.py <CSVFile>\n';
这是输入 CSV:
a,a,a
b,b,b
c,c,c
这是现在的输出(不需要):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>a</string>
<string>b</string>
<string>c</string>
</array>
</plist>
这是我想要的输出:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>a</string>
<string>a</string>
<string>a</string>
</array>
<array>
<string>b</string>
<string>b</string>
<string>b</string>
</array>
<array>
<string>c</string>
<string>c</string>
<string>c</string>
</array>
</plist>
我在这个脚本中做错了什么?
解决方案
我想我已经解决了。以下脚本似乎产生了我需要的东西:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
import csv
args = sys.argv[1:]
if args:
if(len(args) == 1):
infile = args[0]
outfile = infile.replace(".csv", ".plist")
plisttype = 'array'
if(open(os.path.abspath(outfile),'w')):
if(os.path.isfile(infile)):
data = csv.reader(open(infile))
output = open(os.path.abspath(outfile),'w')
output.write('<?xml version="1.0" encoding="UTF-8"?>\n')
output.write('<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n')
output.write('<plist version="1.0">\n')
output.write('<array>\n')
for row in data:
output.write('<array>\n')
rowList = [elem.strip().split(',') for elem in row]
for i in rowList:
output.write('\t<string>' + ''.join(i) + '</string>\n')
output.write('</array>\n')
output.write('</array>\n')
output.write('</plist>')
output.close()
print os.path.basename(os.path.abspath(outfile)) + ' created successfully'
else:
print infile + ' could not be opened'
exit()
else:
print outfile + ' is not writable'
exit()
else:
print '\ncsv2array usage:\npython csv2array.py <CSVFile>\n';
推荐阅读
- javascript - JavaScript 内部工作原理说明
- reactjs - 传递值堆栈导航器
- python - 从移动 8 拼图生成继任者
- locust - 在 Locust 中将任务标记为成功(无 HttpLocust)
- python - 在新版本的 azure eventthub 中,如何在超时后关闭 consumer_client
- laravel - AdminLTE表破屏
- mysql - MySQL 一对多条件查询只使用 2 个查询 - 为什么 MyBatis 不使用这个?不好吗?
- django - 如何查询每月总金额
- github - 在 github 上需要格式化的帮助
- python - Jupyter Notebooks 中的 Python:未定义“表”