我正在创建一个脚本,该脚本将Excel文件与Snowflake数据库表进行比较。如果各列都相同,则脚本将从Excel导入数据并将其追加或插入到Snowflake表中。我正在使用两个相同的电子表格进行测试以使脚本正常工作-如果我正确理解我的代码,并且如果两个文件之间没有差异,则此脚本应返回“ Sweet”。但是,它返回的是“仅此而已!”这是ELSE stmt。我可能会误解“无”在这里的工作原理,因此对此有任何想法。
我还有一个测试文件,在其中添加了一个垃圾列(“ blah”)-确保脚本正常运行。无论与相同文件还是类似文件进行比较,我都得到相同的结果。我还尝试了==而不是IF stmt中的IS,并尝试将set1和set2变量传递到main()函数中,但这些都不起作用。
import pandas as pd
file1 = pd.read_excel('./excel/file1.xlsx', sheet_name = 'export',index_col = 0)
file2 = pd.read_excel('./excel/file2.xlsx', sheet_name = 'export',index_col = 0)
set1 = set(file1.columns)
set2 = set(file2.columns)
def main():
if set1.difference(set2) == None:
print("Sweet")
else:
print("that's all folks!")
main()
我要实现的目标是,如果文件的列中有任何差异,则应向该函数注册,以使它引发错误。如果列匹配,则可以安全地通过该函数并最终写入Snowflake。
更新:将set1.difference(set2)
与set()
而不是None
进行了比较。
答案 0 :(得分:1)
您的问题是您正在使用otherOptions.fields
运算符来检查对象是否等于None。
Python有不同的方法来检查是否为空,无或为空。
如果对象为空或为 None ,只需将Iterable对象放在==
语句中或if
构造函数中,就会产生true。 >
bool()
如果比较的变量也为None(假设对象是set对象的纯实例),则与None进行比较只会产生myset = None
bool(myset)
False
myset = set()
bool(myset)
False
myset.add("foo")
bool(myset)
True
:
True
查看对象是否为空:
myset = None
myset == None
True
myset == set()
False
要查看对象是否为空(但是请注意,如果对象为None,这将引发异常):
myset = None
myset is None
True
选择适合您情况的内容,但是myset = set()
len(myset) == 0
True
myset = None
len(myset)
# [...]
TypeError #[...]
是更安全的IMO。