根据其文档,csv.writer默认情况下应使用'\ r \n'作为lineterminator.
import csv
with open("test.csv", "w") as f:
writer = csv.writer(f)
rows = [(0,1,2,3,4),
(-0,-1,-2,-3,-4),
("a","b","c","d","e"),
("A","B","C","D","E")]
print writer.dialect.lineterminator.replace("\r", "\\r").replace("\n", "\\n")
writer.writerows(rows)
print writer.dialect.lineterminator.replace("\r", "\\r").replace("\n", "\\n")
Run Code Online (Sandbox Code Playgroud)
这打印
\r\n
\r\n
Run Code Online (Sandbox Code Playgroud)
正如所料.但是,创建的csv文件使用了行终止符'\ r \n\r \n'
0,1,2,3,4
0,-1,-2,-3,-4
a,b,c,d,e
A,B,C,D,E
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我使用csv.writer时出了什么问题?
Python版本:
在Win32上基于Python 2.6.2(r262:71600,2009年4月21日,15:05:37)[MSC v.1500 32位(英特尔)]的ActivePython 2.6.2.2(ActiveState Software Inc.)
在Windows Vista上
我正在尝试使用以下powershell脚本将多个Excel文件(xls)转换为csv:
$excel = new-object -ComObject "Excel.Application"
$excel.DisplayAlerts=$True
$excel.Visible =$false
foreach ($file in get-childitem $src_dir) {
$wb = $excel.Workbooks.Open($file.FullName)
$wb.SaveAs($dst_dir + $file.Name + ".csv", 6)# 6 -> csv
$wb.Close($True)
}
$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
Run Code Online (Sandbox Code Playgroud)
原则上这有效,例如我得到csv文件.但是,对于一些文件(每次运行不同),我得到一个例外:
Exception calling "SaveAs" with "2" argument(s): "Microsoft Office Excel cannot access the file 'C:\Users\...\AppData\Local\Temp'. ...
Run Code Online (Sandbox Code Playgroud)
另外,我收到一个消息框,询问我是否要将更改保存到源xls.
一旦我调用SaveAs,$ wb就会引用新文件.那么如何保存或放弃对源文件的更改?为什么这只发生在几个文件中?这个脚本还有其他问题吗?
更新
我将输入文件(大约200)任意划分(即不知道组的大小)为10组,并在自己的运行中处理每个组.这样做有点不方便.
提前致谢
根据PEP 257,命令行脚本的docstring应该是它的用法消息.
脚本(独立程序)的docstring应该可用作其"用法"消息,当使用不正确或缺少的参数(或者可能使用"-h"选项,"help")调用脚本时打印.这样的docstring应记录脚本的功能和命令行语法,环境变量和文件.用法消息可以相当复杂(几个屏幕已满),并且应该足以让新用户正确使用该命令,以及对复杂用户的所有选项和参数的完整快速参考.
所以我的docstring看起来像这样:
<tool name> <copyright info> Usage: <prog name> [options] [args] some text explaining the usage... Options: -h, --help show this help message and exit ...
现在我想使用optparse模块.optparse生成"选项"部分和解释命令行语法的"用法":
from optparse import OptionParser
if __name__ == "__main__":
parser = OptionParser()
(options, args) = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
因此,使用"-h"标志调用脚本将打印:
Usage: script.py [options] Options: -h, --help show this help message and exit
这可以修改如下:
parser = OptionParser(usage="Usage: %prog [options] [args]",
description="some text explaining the usage...")
Run Code Online (Sandbox Code Playgroud)
结果
Usage: script.py [options] [args] some text explaining the …
csv ×2
python ×2
excel ×1
line-endings ×1
optparse ×1
powershell ×1
python-2.x ×1
windows ×1
xls ×1