【发布时间】:2016-06-01 11:28:54
【问题描述】:
以下代码有效,但将多行字符串的每个换行符分配给新行,而不是一个单元格的所需状态。
在研究可能的解决方案时,我读到:
- 我应该尝试用双引号将字符串括起来
- 将
newline替换为carriage return会有所帮助 - 通过
[]声明解析为列表/元组
在尝试了上述所有方法后,我对为什么这不起作用感到非常困惑。如果我删除newline,它会将所有内容分配给行中的单个单元格,但很难阅读。
输出带有csv.writer的字符串时有没有办法保留格式?
def run_rip():
os.chdir('/REGRIPPERDIR/RegRipper2.8')
for k in ntDict:
run_command = "".join(["./rip.pl", " -r /APATH/NTUSER.DAT -p ", str(k)])
process = subprocess.Popen(run_command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err = process.communicate()
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 = ('"%s' % os.linesep.join([s for s in match.group('rest').splitlines() if s]))
rest = rest.replace('\n','\r\n')
headers = ['Name', 'Description', 'Found']
f = csv.writer(open('/APATH/ntuser.csv', 'ab'),
dialect=csv.excel,
delimiter='\t')
f.writerow(headers)
f.writerow((first, second, rest))
print(out)
ntDict.popitem(last=False)
run_rip()
/edit:我被要求在下面的 cmets 中发布第三个字符串 rest 的样本,因为它已被收集。以下文本将传递给csv.writer。
Baseline\n #First string as defined by the regex
(All) scans a hive\n #Second String as defined by the regex
Total values checked : 64\n #This and below is the rest string
Number of binary value lengths : 11\n
...\n
Value -5: 176 bytes [# times: 1]\n
Value -4: 712 bytes [# times: 5]\n
【问题讨论】:
-
我可以建议您发布一些 csv 文本(即字符串),以提供所需的布局吗?根本问题是 csv 并不是真正的标准。您要询问的似乎是生成粘贴图像的应用程序接受的任何格式。
-
@dementedhedgehog 我正在与之交互的应用程序是 Registry Ripper,它输出非标准文本并创建大量不需要的过多结果。所以我的方法是调用应用程序,读取标准输出,将数据放入上面分配的三个变量中,然后输出到 .csv 中。然而,第三个变量有许多换行符,不幸的是它们正在被 csv.writer 读取并输出到单独的单元格,如
sample output中所述。有没有办法在 .csv 的输出中保留换行符/回车符,以便我可以获得desired state? -
是否有其他 .csv 模块可以执行上述操作?我的问题是否不清楚,是否缺乏赏金?自从我发布以来,上述问题一直困扰着我。我已经尝试了多个小时的解决方案,但我无法掌握(可能是因为我是编程新手)。
-
您也可以编写自己的 csv 编写器。这很简单(如果您需要在值前添加一个空格,如下所示:“2\n3”)。我没有 excel,所以我无法测试 excel 成功导入的格式(无论如何它可能会因 excel 版本而异)。
标签: python-2.7 csv