我有这个代码将一些字符串打印到文本文件中,但我需要python来忽略每个空项目,因此它不会打印空行。
我写了这段代码,这很简单,但是应该这样做:
lastReadCategories = open('c:/digitalLibrary/' + connectedUser + '/lastReadCategories.txt', 'w')
for category in lastReadCategoriesList:
if category.split(",")[0] is not "" and category is not None:
lastReadCategories.write(category + '\n')
print(category)
else: print("/" + category + "/")
lastReadCategories.close()
我可以看到它没有问题,但是,python继续将空项打印到文件中。所有类别都用这种表示法写成:“category,timesRead”,这就是为什么我要求python查看逗号之前的第一个字符串是否为空。然后我看看整个项目是否为空(不是None)。理论上我认为它应该有效,对吧? P.S。:我已经尝试过询问是否检查“类别”是否不是“”并且不是“”,仍然是相同的结果。
答案 0 :(得分:4)
测试布尔值,然后反转测试以确保.split()
首先起作用,None.split()
会抛出异常:
if category is not None and category.split(",")[0]:
空字符串是'false-y',不需要对任何东西进行测试。
你甚至可以测试:
if category and not category.startswith(','):
获得相同的最终结果。
根据评论,您的新数据似乎会让您的数据变得混乱。在测试时去除那些:
for category in lastReadCategoriesList:
category = category.rstrip('\n')
if category and not category.startswith(','):
lastReadCategories.write(category + '\n')
print(category)
else: print("/{}/".format(category))
请注意,您只需在循环内更改category
即可;这样可以避免多次调用.rstrip()
。
答案 1 :(得分:1)
rstrip()您的类别,然后再将其写回文件
lastReadCategories = open('c:/digitalLibrary/' + connectedUser +'/lastReadCategories.txt', 'w')
for category in lastReadCategoriesList:
if category.split(",")[0] is not "" and category is not None:
lastReadCategories.write(category.rstrip() + '\n')
print(category.rstrip())
else: print("/" + category + "/")
lastReadCategories.close()
我能够使用您提供的样本列表进行测试(无需将其写入文件):
lastReadCategoriesList = ['A,52', 'B,1\n', 'C,50', ',3']
for category in lastReadCategoriesList:
if category.split(",")[0] is not "" and category is not None:
print(category.rstrip())
else: print("/" + category + "/")
>>> ================================ RESTART ================================
>>>
A,52
B,1
C,50
/,3/
>>>
答案 2 :(得分:0)
测试空字符串(即只有空格但不是''
)的经典方法是使用str.strip()
:
>>> st=' '
>>> bool(st)
True
>>> bool(st.strip())
False
哪个也适用于空字符串:
>>> bool(''.strip())
False
您有if category.split(",")[0] is not "" ...
,这不是推荐的方法。你可以这样做:
if category.split(',')[0] and ...
或者,如果你想变得更有语言:
if bool(category.split(',')[0]) is not False and ...
您可能正在处理CSV中前导空格的问题:
>>> ' ,'.split(',')
[' ', '']
>>> ' ,val'.split(',')
[' ', 'val']