Python使用startswith字符串读取值,然后再到达该值

2024-09-27 00:15:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含用户名及其相关信息的文件,正如我在user_list.txt文件中提供的那样。数据中有两件事:

  1. 数据总是以关键字dn:和它的相关值(如mailgivenNameuid)开始,这些值由单独的换行符分隔

  2. 然而,在某些情况下,它只是以dn:开头的起始线

下面的代码部分有效,说明它不会像您在输出中看到的那样打印最后一行dn: uid=aadhar,ou=people,o=udalt.com。只是想知道我在这里做错了什么,并希望任何更正或专家的意见

#!/grid/common/pkgs/python/v3.6.1/bin/python3
myline = ''
Flag = 0
with open('user_list.txt', 'r') as frb:
    for line in frb:
        if line.startswith("dn:"):
            Flag = 1
            if Flag == 1:
                print(myline)
            myline = line.strip()
        else:
            myline = myline.strip("\n") + ' ' + line.strip("\n")
            Flag = 0

我试图从中获取结果的文件:

$ cat user_list.txt
dn: ou=People,o=udalt.com
dn: ou=DC,ou=People,o=udalt.com
dn: uid=3dv,ou=people,o=udalt.com
givenName: DUMAN reserved
displayName: DUMAN reserved account
uid: 3dv
dn: uid=aabdalla,ou=people,o=udalt.com
mail: aabdalla@udalt.com
givenName: kamina
displayName: kamina Abdal
uid: aabdalla
l: Vendor Loc, US
dn: uid=aabhiram,ou=People,o=udalt.com
mail: aabhiram@udalt.com
givenName: Amperayani
telephoneNumber: +91-8888888888
displayName: Amperayani Abhiram
l: Bangalore, India
uid: aabhiram
dn: uid=aadhar,ou=people,o=udalt.com

代码结果如下:

dn: ou=People,o=udalt.com

dn: ou=DC,ou=People,o=udalt.com

dn: uid=3dv,ou=people,o=udalt.com givenName: DUMAN reserved displayName: DUMAN reserved account uid: 3dv
dn: uid=aabdalla,ou=people,o=udalt.com mail: aabdalla@udalt.com givenName: kamina displayName: kamina Abdal uid: aabdalla l: Vendor Loc, US
dn: uid=aabhiram,ou=People,o=udalt.com mail: aabhiram@udalt.com givenName: Amperayani telephoneNumber: +91-8888888888 displayName: Amperayani Abhiram l: Bangalore, India uid: aabhiram

感谢您的帮助和指导


Tags: comuidlineoumailpeopleflagdn
1条回答
网友
1楼 · 发布于 2024-09-27 00:15:36

我相信这会解决你的问题:

代码:

dataBlock = ''
with open('user_list.txt', 'r') as frb:
    for line in frb:
        line = line.strip("\n")

        if line.startswith('dn:'):
            print(dataBlock)
            dataBlock = ''

        dataBlock = dataBlock + ' ' + line
    else:
        print(dataBlock)         

输出:

 dn: ou=People,o=udalt.com
 dn: ou=DC,ou=People,o=udalt.com
 dn: uid=3dv,ou=people,o=udalt.com givenName: DUMAN reserved displayName: DUMAN reserved account uid: 3dv
 dn: uid=aabdalla,ou=people,o=udalt.com mail: aabdalla@udalt.com givenName: kamina displayName: kamina Abdal uid: aabdalla l: Vendor Loc, US
 dn: uid=aabhiram,ou=People,o=udalt.com mail: aabhiram@udalt.com givenName: Amperayani telephoneNumber: +91-8888888888 displayName: Amperayani Abhiram l: Bangalore, India uid: aabhiram
 dn: uid=aadhar,ou=people,o=udalt.com

说明: 对于user_list.txt文件中的每一行,它检查该行是否以“dn:”开头。如果是,则打印当前数据块并用空字符串重置数据块。它还将当前行添加到每行的数据块中

最后,由于for循环不会打印最后一行,else块将打印最后一行


谢谢

相关问题 更多 >

    热门问题