python-2.7 - Python csv writer "AttributeError: __exit__"问题

标签 python-2.7 csv

我想在制表符分隔的 .csv 中写入三个变量,每次脚本迭代字典中的键值时附加值。

当前脚本调用一个命令,将标准输出正则表达式为 out然后将三个定义的正则表达式组分配给各个变量以写入标记为 first 的 .csv secondthird .运行以下脚本时出现 __exit_ 错误。

/注意我已经阅读了 csv.writer 并且我仍然对是否可以将多个变量写入一行感到困惑。

感谢您的任何帮助,您可以提供。

 import csv, re, subprocess

 for k in myDict:
     run_command = "".join(["./aCommand", " -r data -p ", str(k)])
     process = subprocess.Popen(run_command,
                                shell=True,
                                stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE)
     out, err = process.communicate()
     errcode = process.returncode
     pattern = re.compile('lastwrite|(\d{2}:\d{2}:\d{2})|alert|trust|Value')
     grouping = re.compile('(?P<first>.+?)(\n)(?P<second>.+?)([\n]{2})(?P<rest>.+[\n])', 
                           re.MULTILINE | re.DOTALL)


    if pattern.findall(out):         
        match = re.search(grouping, out)
        first = match.group('first')
        second = match.group('second')
        rest = match.group('rest')

     with csv.writer(open(FILE, 'a')) as f:
        writer = csv.writer(f, delimiter='\t')
        writer.writerow(first, second, rest)

编辑:在评论中要求发布整个回溯,注意回溯中列出的行将与上面的代码不匹配,因为这不是整个脚本。
Traceback (most recent call last):
File "/mydir/pyrr.py", line 60, in <module>
run_rip()
File "/mydir/pyrr.py", line 55, in run_rip
with csv.writer(open('/mydir/ntuser.csv', 'a')) as f:
AttributeError: __exit__

回答:使用下面的评论,我可以写成如下。
f = csv.writer(open('/mydir/ntuser.csv', 'a'),
                       dialect=csv.excel,
                       delimiter='\t')
f.writerow((first, second, rest))

最佳答案

错误很明显。 with语句采用上下文管理器,即具有 __enter__ 的对象和一个 __exit__方法,例如open返回的对象. csv.writer不提供这样的对象。您还尝试两次创建作家:

with open(FILE, 'a') as f:
    writer = csv.writer(f, delimiter='\t')
    writer.writerow(first, second, rest)
with ... f:就像一个 try...except...finally保证 f无论发生什么,它都是关闭的,除非您不必输入它。 open(...)返回一个上下文管理器,其 __exit__方法在该 finally 中被调用块您不必键入。这就是你的异常(exception)所提示的。 open返回一个具有 __exit__ 的对象正确定义,因此可以处理 with 中的正常退出和异常堵塞。 csv.writer没有这样的方法,所以不能在with中使用声明本身。您必须在 with 中执行此操作正如我向您展示的那样,在声明之后阻止。

关于python-2.7 - Python csv writer "AttributeError: __exit__"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35497373/

相关文章:

python - 如何在 python 中迭代条件检查?

python-2.7 - 如何将时间范围绘制为 Pandas 或 MatPlotLib 中的值

powershell - 将固定宽度的 txt 文件转换为 CSV/set-content 或 out-file -append?

powershell - 使用 Powershell 将 csv 导入到 SharePoint 列表

csv - 批处理 for 循环、csv 解析和正确输出到文件的问题

java - 将双变量值存储到列表<string>中

python - Python 2 和 Python 3 中的整数除法

Python - 以 YYYY-MM-DD 格式获取昨天的日期作为字符串

javascript - Python 中的列表 => Javascript 翻译

node.js - 当文件中有更新时,如何从nodejs中的fs.watch获取更新的数据