我在用Python编写制表符分隔的文本文件时遇到问题。我将其设置为写入项目ID、宽度、深度等,但当我查看最后的数据文件时,即使两个产品ID的长度相同,一个也会被正确标记,另一个则不会。这就是它在文本文件中的样子:
Product ID Tariff Number Net Depth Net Height Net Length Net width Net Weight
7TAD012610R0010 3917320010 .61 m .203 m .61 m
7TAD012610R0012 3917320010 .66 m .229 m .66 m
7TAD012610R0013 3917320010 .711 m .178 m .711 m
7TAD012610R0014 3917320010 .711 m .178 m .711 m
7TAD013190R0000 7307193060 .102 m .152 m .114 m
7TAD013180R0000 7307193060 .102 m .203 m .127 m
7TAD013180R0002 7307193060 .114 m .076 m .127 m
7TAD013190R0002 7307193060 .102 m .152 m .114 m
7TAD013190R0004 7307193060 .102 m .152 m .127 m
7TAD013180R0005 7307193060 .262 m .188 m .107 m
正如你所看到的,前3个没有其他3个那么突出,尽管它们看起来长度相同,字符数量相同。。。以下是我为此编写的部分代码:
for URL in URLList:
try:
dataSoup = BeautifulSoup(urllib.request.urlopen(URL).read())
print("Page", pageNo, "retrieved")
#Try to find data of that type
try:
proID = columnLookup(URL, "Product ID:")
fh.write(str(proID))
fh.write("t")
if len(PID[pageNo - 1]) < 8:
fh.write("t")
except:
fh.write("tt")
try:
fh.write(dataSoup.find(id="CustomsTariffNumber").next_sibling.next_sibling.div.text)
fh.write("t")
except:
fh.write("tt")
try:
fh.write(dataSoup.find(id="ProductNetDepth").next_sibling.next_sibling.div.text)
fh.write("t")
if len(dataSoup.find(id="ProductNetDepth").next_sibling.next_sibling.div.text) < 8:
fh.write("t")
print("Net Depth:", dataSoup.find(id="ProductNetDepth").next_sibling.next_sibling.div.text)
#If none is found, skip over that column: Leave it blank
except:
fh.write("tt")
如果有人能让我知道它为什么这么做以及如何修复它,那就太好了。我认为这与它包含的字符有关,但我不知道该怎么解决,我试着添加和删除标签,试图找到两者的长度,但似乎什么都不管用。
如果这是正确的问题,这是去除它的正确方法吗?:
try:
proID = columnLookup(URL, "Product ID:")
fh.write(str(proID).strip())
fh.write("t")
if len(PID[pageNo - 1]) < 8:
fh.write("t")
except:
fh.write("tt")
我找到了更好的方法。。。我决定只使用内置的csv文件读取器/写入器,正如主人公hiro所建议的那样。如果有人想知道的话,我就是这样做的:
with open('data.csv', 'a') as dataFile:
csvWriter = csv.writer(dataFile, delimiter=',')
csvWriter.writerow(productData)
然后我将数据值存储在productData中!
谢谢大家的帮助!