Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在相同的文本文件上返回不同的结果_Python_Powershell_Python Unicode - Fatal编程技术网

Python在相同的文本文件上返回不同的结果

Python在相同的文本文件上返回不同的结果,python,powershell,python-unicode,Python,Powershell,Python Unicode,我是编程新手。我正在使用powershell以文本文件的形式从远程服务器的Windows安全事件日志中筛选和返回记录。我正在使用python脚本计算用户名在文本中出现的次数。在对原始文本文件运行时,python打印并清空字典{}。但是,如果复制文本文件的内容并将其粘贴到新的文本文件中并对其运行python脚本,它将返回正确的计数:{'name1':2'name2':13,'name3':1,'name4':1,'name5':2,'name6':2}。文本文件看起来相同,字符位置也相同。有什么问

我是编程新手。我正在使用powershell以文本文件的形式从远程服务器的Windows安全事件日志中筛选和返回记录。我正在使用python脚本计算用户名在文本中出现的次数。在对原始文本文件运行时,python打印并清空字典{}。但是,如果复制文本文件的内容并将其粘贴到新的文本文件中并对其运行python脚本,它将返回正确的计数:
{'name1':2'name2':13,'name3':1,'name4':1,'name5':2,'name6':2}
。文本文件看起来相同,字符位置也相同。有什么问题吗

动力壳

Get-WinEvent -LogName "Security" -ComputerName server01 | Where-Object {$_.ID -eq 4663} | where Message -CNotLike "*name1*" | where Message -CNotLike "*name2*" | Format-List -Property * | Out-File "C:\apowershell\winsec\events.txt"
蟒蛇

fhand = open('events2.txt')
counts = dict()
for line in fhand:
    if line.startswith('            Account Name:'):
        words = line.split()
        words.remove('Account')
        words.remove('Name:')
        for word in words:
            if word not in counts:
               counts[word] = 1
            else:
               counts[word] += 1
print(counts)
日志记录 消息:试图访问对象

      Subject:
        Security ID:        S-1-5-21-495698755-754321212-623647154-4521
        Account Name:       name1
        Account Domain:     companydomain
        Logon ID:       0x8CB9C5024

      Object:
        Object Server:      Security
        Object Type:        File
        Object Name:        e:\share\file.txt
        Handle ID:      0x439c
        Resource Attributes:    S:PAI

      Process Information:
        Process ID:     0x2de8
        Process Name:       C:\Windows\System32\memshell.exe

      Access Request Information:
        Accesses:       Execute/Traverse

        Access Mask:        0x20

答案就在你的问题陈述中。您正在读取一个在MS Windows上创建的文件,其中一个python程序运行在(可能是)非Windows系统上


问题是原始文件的字符编码与python程序期望的不匹配。具体来说,原始文件采用UCS-2(或UTF-16)编码。如果您在类UNIX操作系统上运行python代码,则可能需要UTF-8。但这取决于您的语言环境,请查看
locale
的输出。谷歌“PythonUTF-16解码”的想法如何处理这一点。尽管就个人而言,我并没有试图让python程序处理UTF-16,而是试图找到一种在Windows系统上将内容转换为UTF-8的方法。

复制粘贴文件内容时,可能会出现制表符/空格转换问题?您能否尝试第行中的条件“帐户名”?嗨,Yakym,问题在于powershell输出的原始文件。当我对它运行python脚本时,它返回一个空字典,只有两个括号{}。但是,当我将内容复制并粘贴到新的文本文件中并对其运行python脚本时,它会返回正确的键和值。但是,出于我的目的,我需要它来处理原始文件或创建一个变通方法。然而,我确实尝试了你的建议,得到了一些有趣的结果,可能会让我更接近答案。输出示例:{“ÿþ”:1,“\x00”:5867,“\x00M\x00e\x00s\x00s\x00a\x00g\x00e\x00”:21,这个答案解决了我的问题。尽管我在Windows 10系统上同时运行powershell和python,但通过在powershell脚本末尾添加-encoding utf8,python脚本成功地针对文本文件运行。