我不是每天都使用Python,我有一个错误,您可以帮我解决。我有以下代码:
import xlrd
import xlwt
import xlsxwriter
string1="Last password change"
string2="Password expires"
string3="Password inactive"
string4="Account expires"
string5="Minimum number of days between password change"
string6="Maximum number of days between password change"
string7="Number of days of warning before password expires"
workbook=xlsxwriter.Workbook('/media/sf_vboxshared/sample.xlsx')
worksheet1=workbook.add_worksheet('Sheet1')
with open('sample.txt','r') as dump:
for line in dump:
if string1 in line:
tail1=line.split(string1)[1]
tail1=tail1.strip()
tail1=tail1.lstrip(":")
for num, line in enumerate(dump, 1):
if string1 in line:
worksheet1.write(num,1,string1)
worksheet1.write(num,2,tail1)
with open('sample.txt', 'r') as dump2:
for line2 in dump2:
if string2 in line2:
tail2=line2.split(string2)[1]
tail2=tail2.strip()
tail2=tail2.lstrip(":")
for num, line2 in enumerate(dump2, 1):
if string2 in line2:
worksheet1.write(num,1,string2)
worksheet1.write(num,2,tail2)
workbook.close()
输入如下所示(示例.txt)地址:
rick
Last password change : Feb 26, 2018
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
john
Last password change : Feb 26, 2018
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
frank
Last password change : Feb 26, 2018
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
romeo
Last password change : Feb 26, 2018
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
这段代码的思想是,我想从示例.txt但格式正确。基本上,列:分隔列。运行此代码时,第二个“with”将覆盖该信息。有人能解释一下为什么会有这种行为,怎么能纠正吗?你知道吗
非常感谢, 罗曼。你知道吗
您遇到的问题是由Python读取文件的方式引起的。 如果打开一个文件并开始从中读取,Python将返回光标位置的数据(第一次打开文件时,光标将位于0,因此文件的开头)。逐行读取将导致光标每次跳到下一行:
将返回:
在您的示例中,打开文件并开始逐行读取:
直到找到匹配的
if string2 in line2:
。此时,您开始enumerate
遍历文件的其余部分,但光标已经移动,因此计数器与实际行数不匹配。你知道吗试着这样做:
Here is how the xslx file looks like (rick的最后一次密码更改在第2行,密码过期日期在第3行等…)
相关问题 更多 >
编程相关推荐