将当前行追加到上一行
Append current line to previous line
我正在尝试解析 .ldif
文件,但未能获得所需的输出。任何帮助深表感谢。
这是我正在使用 python:
lines = open("use.ldif", "r").read().split("\n")
for i, line in enumerate(lines):
if not line.find(":"):
lines[i-1] = lines[-1].strip() + line
lines.pop(i)
open("user_modified.ldif", "w").write("\n".join(lines)+"\n")
use.ldif(输入文件)
dn: cnh
changetype: add
objectclass: inetOrgPerson
objectclass: cdsUser
objectclass: organizationalPerson
objectclass: Person
objectclass: n
objectclass: Top
objectclass: cd
objectclass: D
objectclass: nshd shdghsf shgdhfjh jhghhghhgh
hjgfhgfghfhg
street: shgdhgf
dn: cnh
changetype: add
objectclass: inetOrgPerson
objectclass: hjgfhgfghfhg
street: shgdhgf kjsgdhgsjhg shdghsgjfhsfsf
jgsdhsh
company: xyz
user_modified.ldif(我的代码输出)
我得到相同的输出,没有任何修改。我觉得这是因为我正在做 split("\n")
但我不知道还能做什么。
期望输出
dn: cnh
changetype: add
objectclass: inetOrgPerson
objectclass: cdsUser
objectclass: organizationalPerson
objectclass: Person
objectclass: n
objectclass: Top
objectclass: cd
objectclass: D
objectclass: nshd shdghsf shgdhfjh jhghhghhghhjgfhgfghfhg
street: shgdhgf
dn: cnh
changetype: add
objectclass: inetOrgPerson
objectclass: hjgfhgfghfhg
street: shgdhgf kjsgdhgsjhg shdghsgjfhsfsfjgsdhsh
company: xyz
正如您在我的输出文件 user_modified.ldif
中看到的那样,第一个条目中的对象 class 和第二个条目中的街道到达下一行。
我怎样才能将它们放在同一行中,就像在所需的输出中一样。
提前致谢
lines = open("use.ldif", "r").read().split("\n")
for i, line in enumerate(lines):
if len(line) > 0 and not (":" in line):
lines[i-1] = lines[i-1].strip() + line
lines.pop(i)
open("user_modified.ldif", "w").write("\n".join(lines)+"\n")
好的,我的方法是:
import re
pattern = re.compile(r"(\w+):(.*)")
with open("use.ldif", "r") as f:
new_lines = []
for line in f:
if line.endswith('\n'):
line = line[:-1]
if line == "":
new_lines.append(line)
continue
l = pattern.search(line)
if l:
new_lines.append(line)
else:
new_lines[-1] += line
with open("user_modified.ldif", "wt") as f:
f.write("\n".join(new_lines))
稍微看一下您的代码,我建议您获取一些关于遍历文件的文档。也许您仍然是 Python 的初学者,但在您的代码中显示您正在处理整个文件 3 次,在 read()
、split('\n')
和最后在 for
语句。当你打开一个文件时,你得到的是描述符,正如你在我的代码中看到的那样,你可以用它来遍历文件,每一步都有一行。对于较大的文件,这将成为一个重要的性能技巧。
我正在尝试解析 .ldif
文件,但未能获得所需的输出。任何帮助深表感谢。
这是我正在使用 python:
lines = open("use.ldif", "r").read().split("\n")
for i, line in enumerate(lines):
if not line.find(":"):
lines[i-1] = lines[-1].strip() + line
lines.pop(i)
open("user_modified.ldif", "w").write("\n".join(lines)+"\n")
use.ldif(输入文件)
dn: cnh
changetype: add
objectclass: inetOrgPerson
objectclass: cdsUser
objectclass: organizationalPerson
objectclass: Person
objectclass: n
objectclass: Top
objectclass: cd
objectclass: D
objectclass: nshd shdghsf shgdhfjh jhghhghhgh
hjgfhgfghfhg
street: shgdhgf
dn: cnh
changetype: add
objectclass: inetOrgPerson
objectclass: hjgfhgfghfhg
street: shgdhgf kjsgdhgsjhg shdghsgjfhsfsf
jgsdhsh
company: xyz
user_modified.ldif(我的代码输出)
我得到相同的输出,没有任何修改。我觉得这是因为我正在做 split("\n")
但我不知道还能做什么。
期望输出
dn: cnh
changetype: add
objectclass: inetOrgPerson
objectclass: cdsUser
objectclass: organizationalPerson
objectclass: Person
objectclass: n
objectclass: Top
objectclass: cd
objectclass: D
objectclass: nshd shdghsf shgdhfjh jhghhghhghhjgfhgfghfhg
street: shgdhgf
dn: cnh
changetype: add
objectclass: inetOrgPerson
objectclass: hjgfhgfghfhg
street: shgdhgf kjsgdhgsjhg shdghsgjfhsfsfjgsdhsh
company: xyz
正如您在我的输出文件 user_modified.ldif
中看到的那样,第一个条目中的对象 class 和第二个条目中的街道到达下一行。
我怎样才能将它们放在同一行中,就像在所需的输出中一样。
提前致谢
lines = open("use.ldif", "r").read().split("\n")
for i, line in enumerate(lines):
if len(line) > 0 and not (":" in line):
lines[i-1] = lines[i-1].strip() + line
lines.pop(i)
open("user_modified.ldif", "w").write("\n".join(lines)+"\n")
好的,我的方法是:
import re
pattern = re.compile(r"(\w+):(.*)")
with open("use.ldif", "r") as f:
new_lines = []
for line in f:
if line.endswith('\n'):
line = line[:-1]
if line == "":
new_lines.append(line)
continue
l = pattern.search(line)
if l:
new_lines.append(line)
else:
new_lines[-1] += line
with open("user_modified.ldif", "wt") as f:
f.write("\n".join(new_lines))
稍微看一下您的代码,我建议您获取一些关于遍历文件的文档。也许您仍然是 Python 的初学者,但在您的代码中显示您正在处理整个文件 3 次,在 read()
、split('\n')
和最后在 for
语句。当你打开一个文件时,你得到的是描述符,正如你在我的代码中看到的那样,你可以用它来遍历文件,每一步都有一行。对于较大的文件,这将成为一个重要的性能技巧。