Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表输出为文本文件_Python - Fatal编程技术网

Python 将列表输出为文本文件

Python 将列表输出为文本文件,python,Python,我试图改进我朋友的Python“Twitch帐户检查器”(基本上是从文本文件中获取用户名列表,并检查它们是否在Twitch.tv上可用)。我打算改进它,将可用用户名输出到文本文件中(与原始列表位于同一位置)。我实际上是在搜索堆栈溢出,发现了一篇文章,其中“解释”了如何将列表(我将可用用户名放入单独的列表)输出到文本文件中 在运行脚本时,它可以很好地工作到应该保存可用用户名的部分。然后,我得到以下错误: Traceback (most recent call last): File "mult

我试图改进我朋友的Python“Twitch帐户检查器”(基本上是从文本文件中获取用户名列表,并检查它们是否在Twitch.tv上可用)。我打算改进它,将可用用户名输出到文本文件中(与原始列表位于同一位置)。我实际上是在搜索堆栈溢出,发现了一篇文章,其中“解释”了如何将列表(我将可用用户名放入单独的列表)输出到文本文件中

在运行脚本时,它可以很好地工作到应该保存可用用户名的部分。然后,我得到以下错误:

Traceback (most recent call last):
  File "multithreadtwitchchecker.py", line 44, in <module>
    output_available_usernames('availableusernames.txt')
  File "multithreadtwitchchecker.py", line 37, in output_available_usernames
    AVAILABLE_USERNAMES = f.write(AVAILABLE_USERNAMES.split('\n'))
AttributeError: 'list' object has no attribute 'split'
回溯(最近一次呼叫最后一次):
文件“multi-threadtwitchchecker.py”,第44行,在
输出可用用户名('availableusernames.txt')
文件“multi-threadtwitchchecker.py”,第37行,在输出\u可用\u用户名中
AVAILABLE_USERNAMES=f.write(AVAILABLE_USERNAMES.split('\n'))
AttributeError:“list”对象没有属性“split”
代码如下:

from multiprocessing.pool import ThreadPool
import re
import requests
import sys

try:
    input = raw_input
except NameError:
    pass

TWITCH_URL = "https://www.twitch.tv/{username}"
TWITCH_REGEX = re.compile(r"^[a-zA-Z0-9_]{4,25}$")
MAX_THREADS = 25
MESSAGES = {True: "Available", False: "Taken"}
AVAILABLE_USERNAMES = []

def read_valid_usernames(filename):
    """Reads a list of usernames and filters out invalid ones."""
    try:
        with open(filename, "r") as fin:
            return [username for username in map(str.strip, fin) if TWITCH_REGEX.match(username)]
    except IOError:
        sys.exit("[!] '{}' - Invalid File".format(filename))

def username_available(username):
    """Checks if a 404 response code is given when requesting the profile. If it is, it is presumed to be available"""
    try:
        return username, requests.get(TWITCH_URL.format(username=username)).status_code == 404
        AVAILABLE_USERNAMES.append(username)
    except Exception as e:
        print(e)

def output_available_usernames(filename):
    """Gets a filename to output to and outputs all the valid usernames to it"""
    global AVAILABLE_USERNAMES
    f = open(filename, 'w')
    AVAILABLE_USERNAMES = f.write(AVAILABLE_USERNAMES.split('\n'))

usernames = read_valid_usernames(input("Enter path to list of usernames: "))

for username, available in ThreadPool(MAX_THREADS).imap_unordered(username_available, usernames):
    print("{:<{size}}{}".format(username, MESSAGES.get(available, "Unknown"), size=len(max(usernames, key=len)) + 1)) 

output_available_usernames('availableusernames.txt')
从multiprocessing.pool导入线程池
进口稀土
导入请求
导入系统
尝试:
输入=原始输入
除名称错误外:
通过
TWITCH_URL=”https://www.twitch.tv/{username}”
TWITCH_REGEX=re.compile(r“^[a-zA-Z0-9{4,25}$”)
最大螺纹数=25
消息={True:“可用”,False:“已获取”}
可用的_用户名=[]
def read_有效_用户名(文件名):
“”“读取用户名列表并筛选出无效的用户名。”“”
尝试:
打开(文件名为“r”)作为fin:
返回[如果TWITCH_REGEX.match(用户名)匹配,则映射中用户名的用户名(str.strip,fin)]
除IOError外:
sys.exit(“[!]”{}“-无效文件”。格式(文件名))
def用户名\u可用(用户名):
“”“检查请求配置文件时是否给出了404响应代码。如果是,则假定该代码可用”“”
尝试:
返回用户名,requests.get(TWITCH_URL.format(username=username))。状态_代码==404
可用的\u用户名。附加(用户名)
例外情况除外,如e:
打印(e)
def输出\可用\用户名(文件名):
“”“获取要输出到的文件名,并向其输出所有有效用户名”“”
全局可用\u用户名
f=打开(文件名为“w”)
AVAILABLE_USERNAMES=f.write(AVAILABLE_USERNAMES.split('\n'))
用户名=读取\有效\用户名(输入(“输入用户名列表路径:”)
对于用户名,在线程池中可用(最多线程)。imap\u无序(用户名可用,用户名):

打印(“{:嗯,写入文件可以这样做:

def output_available_usernames(filename):
    global AVAILABLE_USERNAMES
    with open(filename, 'w') as f:
        for name in AVAILABLE_USERNAMES:
            f.write(name + '\n')
def username_available(username):
    """Checks if a 404 response code is given when requesting the profile. If it is, it is presumed to be available"""
    try:
        if requests.get(TWITCH_URL.format(username=username)).status_code == 404:
            AVAILABLE_USERNAMES.append(username)
            return username, True
        else:
            return username, False
    except Exception as e:
        print(e)
正如Jornsharpe所说,
split
走错了方向

但是,您的代码现在有一个更深层次的问题。您在
return
语句之后附加到
AVAILABLE\u USERNAMES
,这样代码就永远不会执行,
AVAILABLE\u USERNAMES
将始终为空。您希望这样:

def output_available_usernames(filename):
    global AVAILABLE_USERNAMES
    with open(filename, 'w') as f:
        for name in AVAILABLE_USERNAMES:
            f.write(name + '\n')
def username_available(username):
    """Checks if a 404 response code is given when requesting the profile. If it is, it is presumed to be available"""
    try:
        if requests.get(TWITCH_URL.format(username=username)).status_code == 404:
            AVAILABLE_USERNAMES.append(username)
            return username, True
        else:
            return username, False
    except Exception as e:
        print(e)

首先,您试图将
拆分为一个列表—一些已经是列表的东西。其次,您试图将一个不是字符串的对象写入一个文件,而不先将其转换。@TigerhawkT3好的,谢谢您。如果您知道正确的解决方案,请将其作为答案发布!我将尝试自己修复此问题,但我不确定是否能得到解决在我看来,
.split
会走错方向…使用
“,”.join(AVAILABLE\u USERNAMES)
创建一个字符串,然后将其写入文件。不要这样做
AVAILABLE\u USERNAMES=f.write(…)
因为
AVAILABLE\u USERNAMES
中的数据丢失了,因为
write()
返回写入的字符数。@furas我已经使用了您建议的所有内容,现在脚本运行时没有任何错误!非常感谢!但是,它创建的文本文件是空的。下面是函数的新代码:我还建议重新编写代码,以避免使用全局变量,因为全局变量是泛型的ally在Python中不受欢迎。你可以在最后的
for
循环中(在
print
语句之后)检查
可用的
值。谢谢。我已经阅读了你的建议并实现了代码,它工作得非常好!还有,感谢@jornsharpe