gpt4 book ai didi

Python 帮助读取由于行尾而失败的 csv 文件

转载 作者:太空狗 更新时间:2023-10-29 20:35:35 25 4
gpt4 key购买 nike

我正在尝试创建此脚本来检查计算机主机名,然后在主列表中搜索值以返回 csv 文件中的相应值。然后打开另一个文件并进行查找替换。我知道这应该很容易,但以前没有在 python 中做过这么多。这是我到目前为止所拥有的...

masterlist.txt  (tab delimited)
Name UID
Bob-Smith.local bobs
Carmen-Jackson.local carmenj
David-Kathman.local davidk
Jenn-Roberts.local jennr

这是我到目前为止创建的脚本

#GET CLIENT HOST NAME
import socket
host = socket.gethostname()
print host

#IMPORT MASTER DATA
import csv, sys
filename = "masterlist.txt"
reader = csv.reader(open(filename, "rU"))

#PRINT MASTER DATA
for row in reader:
print row

#SEARCH ON HOSTNAME AND RETURN UID



#REPLACE VALUE IN FILE WITH UID
#import fileinput
#for line in fileinput.FileInput("filetoreplace",inplace=1):
# line = line.replace("replacethistext","UID")
# print line

现在,它只是设置为打印主列表。我不确定是否需要解析列表并将其放入字典或什么。我真的需要弄清楚如何在第一个字段中搜索主机名,然后在第二列中返回该字段。

在此先感谢您的帮助,亚伦


更新:我从 masterlist.txt 中删除了第 194 行和最后一行,然后重新运行脚本。结果如下:

Traceback (most recent call last):
File "update.py", line 3, in for row in csv.DictReader(open(fname), delimiter='\t'): File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/csv.py", line 103, in next self.fieldnames File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/csv.py", line 90, in fieldnames self._fieldnames = self.reader.next() _csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

当前正在使用的脚本是...

import csv
fname = "masterlist.txt"
for row in csv.DictReader(open(fname), delimiter='\t'):
print(row)

最佳答案

第194行和最后一行出现的两次'\xD5'与问题无关。

问题似乎是 Python 2.6 csv 模块中的错误、误导性错误消息或不正确/模糊的文档。

在文件中,各行以“\x0D”或 Classic Mac 传统中的“\r”结尾。最后一行没有终止,但这与问题无关。

docs for csv.reader说“如果 csvfile 是文件对象,则必须在不同平台上使用‘b’标志打开它。”众所周知,它在 Windows 上确实有所作为。但是,在这种情况下,使用“rb”或“r”打开文件没有区别——仍然是相同的错误消息。

docs for csv.Dialect.lineterminator说“用于终止作者生成的行的字符串。它默认为'\r\n'。注意:读者被硬编码为将'\r'或'\n'识别为行尾,并忽略行终止符。这种行为将来可能会改变。”它似乎将“\r”识别为换行符而不是行尾/字段结束。

错误消息“_csv.Error:在未加引号的字段中看到换行符 - 您需要以通用换行模式打开文件吗?”令人困惑;它被识别为 '\r' 为换行符,但它没有将换行符视为行尾(因此隐含地结束)。

似乎有必要以“rU”模式打开文件以使其“工作”。尚不清楚为什么在通用换行模式下识别的相同 '\r' 会更好。

关于Python 帮助读取由于行尾而失败的 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2930673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com