首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法验证电话号码是否在文件中

无法验证电话号码是否在文件中
EN

Stack Overflow用户
提问于 2019-06-03 03:46:43
回答 1查看 63关注 0票数 1

我正在开发一个短信营销服务。为了订阅我的服务,用户必须输入关键字memphis。我已经编写了将用户号码添加到我的订阅者列表中的代码,但是如果某人的号码已经在列表中,我如何才能包括一个过程来检查已经存在的列表并回复一条消息,通知用户他们已经订阅了?

我已经尝试使用for循环来迭代csv文件中的每个数字:

代码语言:javascript
复制
def sms_subscription():
    contact_num = request.values.get('From')
    response = request.values.get('Body')
    resp = MessagingResponse()

   #NEW SUBSCRIBERS
    if response.lower() == 'memphis':
       with open('Subscriber_List.csv', 'r+') as subscriber_list:
           subscriber_list_writer = csv.writer(subscriber_list)
           for contact in subscriber_list:
               if contact == contact_num:
                   resp.message("Your already subscribed")
                   return str(resp)

               else:
                   subscriber_list_writer.writerow([contact_num])
                   resp.message("Thanks for subscribing to our local coupon book. As we get new deals, we'll notify via SMS. To opt-out reply 'STOP'")
                   return str(resp)

    else:
        resp.message("Be sure to check spelling and for spaces and try again.")
        return str(resp

我已经用我的个人手机测试过了。我没有回复我我的号码已经订阅了,而是继续收到“谢谢您订阅了我们当地的优惠券图书”。

当我们获得新的交易时,我们会通过短信通知用户。要选择退出,用户应回复'STOP‘。

EN

回答 1

Stack Overflow用户

发布于 2019-06-03 04:50:33

我想我看到了问题所在。

你的代码:

代码语言:javascript
复制
def sms_subscription():
    contact_num = request.values.get('From')
    response = request.values.get('Body')
    resp = MessagingResponse()

   #NEW SUBSCRIBERS
    if response.lower() == 'memphis':
       with open('Subscriber_List.csv', 'r+') as subscriber_list:
           subscriber_list_writer = csv.writer(subscriber_list)
           for contact in subscriber_list:
               if contact == contact_num:
                   resp.message("Your already subscribed")
                   return str(resp)

               else:
                   subscriber_list_writer.writerow([contact_num])
                   resp.message("Thanks for subscribing to our local coupon book. As we get new deals, we'll notify via SMS. To opt-out reply 'STOP'")
                   return str(resp)

    else:
        resp.message("Be sure to check spelling and for spaces and try again.")
        return str(resp

首先,您应该将subscriber_list更改为subscriber_list.readlines(),以获得其中每一行都是一个元素的列表。

在for循环中,您可以检查contact是否等于contact_num,但是contact包含换行符(\n) (在我测试它的时候,它可能包含空格或其他字符),因此不等于contact_num。要解决这个问题,您可以在if contact == contact_num上添加这些行(有几行代码可以做到这一点,例如使用正则表达式,但我使用这个示例是为了提高可读性和简单性)

代码语言:javascript
复制
contact = contact.replace('\n','')
contact = contact.replace(' ','')

它们所做的就是将换行符和空格替换为空,实质上就是删除它们。

此外,在for循环中,您将检查contact_num是否在文件中,但如果它不是第一个元素,则它将运行以下内容:

代码语言:javascript
复制
else:
    subscriber_list_writer.writerow([contact_num])
    resp.message("Thanks for subscribing to our local coupon book. As we get new deals, we'll notify via SMS. To opt-out reply 'STOP'")
    return str(resp)

您需要做的是检查文件中的所有元素,然后,如果没有找到该编号,则将其写入文件。当您返回一个值时,它将退出函数,因此如果文件中的第一个元素不是所需的电话号码,那么它将在else下运行您的代码并退出函数。

要解决这个问题,只需移动

代码语言:javascript
复制
else:
    subscriber_list_writer.writerow([contact_num])
    resp.message("Thanks for subscribing to our local coupon book. As we get new deals, we'll notify via SMS. To opt-out reply 'STOP'")
    return str(resp)

在for循环之外,删除else--这是不需要的。循环现在将检查contact_num是否在文件中,如果在,它将返回

"You're already subscribed"

如果不是,它会将num添加到文件中并返回

"Thanks for subscribing to our local coupon book. As we get new deals, we'll notify via SMS. To opt-out reply 'STOP'"

我假设MessagingResponse()是一个类,如下所示:

代码语言:javascript
复制
class MessagingResponse:
    def __init__(self,message):
        self.message = message

如果是这样,resp.message("Your already subscribed")将抛出一个错误;正确的语法是resp.message = "Your already subscribed"

最终代码(稍作修改):

编辑:

正如@jpmc26所说,使用csv读取器/写入器是更好的选择。在前面的代码中也有一些bug。编辑代码:

代码语言:javascript
复制
def sms_subscription():
    contact_num = request.values.get('From')
    response = request.values.get('Body')
    resp = MessagingResponse("") #you might want to remove the quotes if this throws an error

   #NEW SUBSCRIBERS
    if response.lower() == 'memphis':
       with open('Subscriber_List.csv', 'r+') as subscriber_list:

           for contact in csv.reader(subscriber_list):
               if contact_num in contact:

                   resp.message = "You're already subscribed"
                   return resp

           csv.writer(subscriber_list).writerow([contact_num])
           resp.message = ("Thanks for subscribing to our local coupon book. As we get new deals, we'll notify via SMS. To opt-out reply 'STOP'")
           return resp

    else:
        resp.message = "Be sure to check spelling and for spaces and try again."
        return resp
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56418430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档