删除和更新文本文件中的行-Python

删除和更新文本文件中的行-Python,python,twitter,Python,Twitter,我正在学习Python,作为一个学习项目,我正在开发一个twitter机器人。我正在使用Python 3。我用以下几行文字发推文 李小龙最喜欢的饮料是什么?哇! 诵读困难的魔鬼崇拜者把他的灵魂卖给了圣诞老人。 你杀死素食吸血鬼的时候,心上有一块牛排。 有一次越狱,我看到一个侏儒爬上了栅栏。他跳下来嘲笑我,我想,这有点屈尊了 这是我使用Twython发送tweet的代码: from twython import Twython, TwythonError import time APP_KEY

我正在学习Python,作为一个学习项目,我正在开发一个twitter机器人。我正在使用Python 3。我用以下几行文字发推文

李小龙最喜欢的饮料是什么?哇!
诵读困难的魔鬼崇拜者把他的灵魂卖给了圣诞老人。
你杀死素食吸血鬼的时候,心上有一块牛排。
有一次越狱,我看到一个侏儒爬上了栅栏。他跳下来嘲笑我,我想,这有点屈尊了

这是我使用Twython发送tweet的代码:

from twython import Twython, TwythonError
import time

APP_KEY = '##########'  # Customer Key here
APP_SECRET = '#############'  # Customer secret here
OAUTH_TOKEN = '###############'  # Access Token here
OAUTH_TOKEN_SECRET = '################'  # Access Token Secret here

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

try:
    with open('jokes.txt', 'r+') as file:
        buff = file.readlines()

    for line in buff:
        if len(line)<140:
            print ("Tweeting...")
            twitter.update_status(status=line)
            time.sleep(3)
            with open ('jokes.txt', 'r+') as file:
                buff.remove(line)
                file.writelines(buff)
        else:
            with open ('jokes.txt', 'r+') as file:
                buff.remove(line)
                file.writelines(buff)
            print ("Skipped line - Char Length Violation")
            continue


except TwythonError as e:
    print (e)
从twython导入twython,TwythonError
导入时间
APP#u KEY=“##########”#此处为客户密钥
APP#u SECRET=“################”#这里是客户的秘密
OAUTH#u TOKEN='''''.'###############################
OAUTH#u TOKEN#u SECRET=“#################################
twitter=Twython(应用程序密钥、应用程序密钥、OAUTH令牌、OAUTH令牌密钥)
尝试:
打开('crooks.txt',r+')作为文件:
buff=file.readlines()
对于线增益:
if len(行)
似乎在<代码>下错放了。。。作为文件:
block。使用的
的优点是,您不需要进行这种记账

else
块中,
file
对象已关闭,因此
file.writelines()
应引发异常


据我所知,buff是一个字符串,因此是不可变的。您可能想尝试
buff=buff.remove(…)
,但它甚至有
remove
方法吗

首先,尽量避免使用
file
来命名变量,因为它是Python中用于类型
file
的保留关键字

固定代码:

from twython import Twython, TwythonError
import time

APP_KEY = '##########'  # Customer Key here
APP_SECRET = '#############'  # Customer secret here
OAUTH_TOKEN = '###############'  # Access Token here
OAUTH_TOKEN_SECRET = '################'  # Access Token Secret here

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

try:
    with open('jokes.txt', 'r+') as fp:
        buff = fp.readlines()

    for line in buff[:]:
        if len(line) < 140:
            print("Tweeting...")
            twitter.update_status(status=line)
            time.sleep(3)
            with open('jokes.txt', 'w') as fp:
                buff.remove(line)
                fp.writelines(buff)
        else:
            with open('jokes.txt', 'w') as fp:
                buff.remove(line)
                fp.writelines(buff)
            print("Skipped line - Char Length Violation")
            continue


except TwythonError as e:
    print(e)
从twython导入twython,TwythonError
导入时间
APP#u KEY=“##########”#此处为客户密钥
APP#u SECRET=“################”#这里是客户的秘密
OAUTH#u TOKEN='''''.'###############################
OAUTH#u TOKEN#u SECRET=“#################################
twitter=Twython(应用程序密钥、应用程序密钥、OAUTH令牌、OAUTH令牌密钥)
尝试:
将open('crooks.txt',r+'作为fp:
buff=fp.readlines()
对于buff[:]中的行:
如果长度(线)<140:
打印(“推特…”)
twitter.update_status(status=line)
时间。睡眠(3)
打开('crooks.txt',w')作为fp:
buff.移除(线)
fp.writelines(浅黄色)
其他:
打开('crooks.txt',w')作为fp:
buff.移除(线)
fp.writelines(浅黄色)
打印(“跳过行-字符长度冲突”)
持续
除TwythonError作为e外:
打印(e)
通常,就像在本例中一样,在迭代同一个iterable的循环中修改iterable(list)不是一个好主意。这里的技巧是buff[:]:
中的line
中的切片操作符,它复制
buff
列表,并在副本上迭代,而不是原始的
buff
列表

此外,如果要覆盖文件,必须以“w”模式打开,而不是以“r+”模式打开,因为“r+”不会首先截断文件

from twython import Twython, TwythonError
import time

APP_KEY = '##########'  # Customer Key here
APP_SECRET = '#############'  # Customer secret here
OAUTH_TOKEN = '###############'  # Access Token here
OAUTH_TOKEN_SECRET = '################'  # Access Token Secret here

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

try:
    with open('jokes.txt', 'r+') as fp:
        buff = fp.readlines()

    for line in buff[:]:
        if len(line) < 140:
            print("Tweeting...")
            twitter.update_status(status=line)
            time.sleep(3)
            with open('jokes.txt', 'w') as fp:
                buff.remove(line)
                fp.writelines(buff)
        else:
            with open('jokes.txt', 'w') as fp:
                buff.remove(line)
                fp.writelines(buff)
            print("Skipped line - Char Length Violation")
            continue


except TwythonError as e:
    print(e)