有人能帮我找出我做错了什么吗?我正在编写一个python shell脚本,它接受一个ldif文件和一个csv文件,然后将csv文件中的内容附加到ldif中每个记录的末尾。比如:
示例CSV:
"KEY","VALUE" "abc","def" "foo","bar" "qwop","flop"
样品本地设计院(ldif):
dn: Aziz cn: Aziz_09 dn: Carl cn: Carl_04
在pythonmyscript.py"sample.ldif""sample.csv"之后
dn: Aziz cn: Aziz_09 KEY: VALUE abc: def foo: bar qwop: flop dn: Carl cn: Carl_04 KEY: VALUE abc: def foo: bar qwop: flop
到目前为止,我的代码可以编译,但不能正确修改文件。我正在创建一个对象,该对象在创建时采用csv文件路径名字符串,然后将键存储到列表字段中,并将值存储到列表字段中。然后打开ldif文件,解析记录之间的转义字符,并在每条记录的末尾插入列表字段(键和值):
import sys, csv # Make new object that can open a csv and set csv data in its arrays class Container(object): def __init__(self, filename=None, keys=None, values=None): self.filename = filename self.keys = [] self.values = [] # Opens self.filename and puts 0th and 1st rows into keys and values respectively def csv_to_list(): with open(self.filename, 'rb') as f: reader = csv.reader(f) for row in reader: self.keys = row[0] self.values = row[1] haruhi = Container("./content/test_pairs.txt") haruhi.csv_to_list # open first argument of the command line call to ldif_record_a.py for read/writing with open(sys.argv[1],'r+') as f1: lines=[x.strip() for x in f1] # Create list with each line as an element f1.truncate(0) f1.seek(0) count = 0 for x in lines: if x: f1.write(x+'\n') else: f1.write("{0}: {1}\n\n".format(haruhi.keys[count] , haruhi.values[count])) count = count + 1 f1.write("{0}: {1}\n\n".format(haruhi.keys[count] , haruhi.values[count]))
我是Python的新手!任何帮助,建议和/或资源方向都将不胜感激!谢谢你SO
好吧,这是我临时安排的,所以它需要改进,但这里是:
import csv
import re
csv_data = list(csv.reader(open('/home/jon/tmp/data.csv'))) # (1)
csv_text = '\n' + '\n'.join('{0} : {1}'.format(*row) for row in csv_data) # (2)
with open('/home/jon/tmp/other.ldif') as f:
contents = f.read() # (3)
print re.sub(r'(\n\n)|(\n$)', csv_text + '\n\n', contents) # (4)
>
(1)将CSV文件读入列表中
csv_data == [['键','值'],['abc','def'],['foo','bar'],['qwop','flp']]
(2)创建要附加到每个ldif的文本表示
键:值abc:def foo:bar qwop:flop
(3) 打开并将全部内容读入内存(请注意,效率不高)
(4) 使用正则表达式查找ldif后面的“下一位”,并输入文本
印刷品:
dn: Aziz
cn: Aziz_09
KEY : VALUE
abc : def
foo : bar
qwop : flop
dn: Carl
cn: Carl_04
KEY : VALUE
abc : def
foo : bar
qwop : flop
您需要对其进行调整,以将数据写回或任何您想要的内容。。。,但这是一个可能的起点——但强烈建议您在Python手册的基础上使用它。请随时要求澄清。
我在尝试生成一个简单DF的共线性分析时遇到了问题(见下文)。我的问题是,每次尝试运行该函数时,都会检索到以下错误消息: 下面是我正在使用的代码 我试图运行函数的DF如下所示。 我在这里有两个猜测;但不知道如何解决这个问题: -猜测1:np。arrange导致与标头发生某种冲突 -猜想2:问题来自blankseperator,它阻止函数正确地从一列跳转到另一列。问题是,我的CSV文件已经有分隔符(我
问题内容: 我正在尝试根据我已经拥有的csv检查提取数据的值。它只会循环遍历CSV的行一次,我只能检查feed.items()的一个值。我需要在某个地方重置值吗?有没有更好/更有效的方法来做到这一点?谢谢。 问题答案: 您可以通过重置文件对象的读取位置来“重置” CSV迭代器。
我想在java中实现以下功能: 一个类,具有根据提供的参数数量读取不同列数的不同csv文件的方法。对于ex: 这里csvPath和csvFileName是自解释的,但csvType在这里是为了获得对应于csv的表名。例如:如果csvType是employee,则表示此csv包含带有员工数据特定标题的员工数据。 现在,我想创建一个通用的泛型方法或类的组合,可以执行此操作,并将不同的csv加载到不同的
问题内容: 我有一个包含100行的CSV文件。 如何读取特定行? 我想读第9行或第23行等? 问题答案: 您可以使用来过滤文件,如下所示:
我正在通过Spark使用以下命令读取csv文件。 我需要创建一个Spark DataFrame。 我使用以下方法将此rdd转换为spark df: 但是在将rdd转换为df时,我需要指定df的模式。我试着这样做:(我只有两列文件和消息) 然而,我得到了一个错误:java。lang.IllegalStateException:输入行没有架构所需的预期值数。需要2个字段,但提供1个值。 我还尝试使用以
pyspark新手,希望将csv文件读取到数据帧。似乎不能让人读。有什么帮助吗? ()中的Py4JJavaError回溯(最近一次调用)----