如何从 Python 中的输入相关函数创建 for 循环?
How to create a for loop from a input dependent function in Python?
我终于掌握了 Python 的诀窍,并开始每天在工作中使用它。然而,学习曲线仍然很陡峭,我在尝试使用我发现 here 从电报频道中抓取成员的代码尝试新事物时遇到了障碍。
目前在第 38-44 行,我们可以 select 列表中的一个组,它将把用户数据抓取到 members.csv 中。
编辑:解决了 CSV 命名问题:
print('Saving In file...')
print(target_group.title)
filename = target_group.title
with open(("{}.csv".format(filename)),"w",encoding='UTF-8') as f:
我想创建一个 for 循环来遍历列表中的每个组,而不是依赖于输入。
print('Choose a group to scrape members from:')
i=0
for g in groups:
print(str(i) + '- ' + g.title)
i+=1
g_index = input("Enter a Number: ")
target_group=groups[int(g_index)]
问题是我不确定如何用for循环替换这部分代码。
尽管将其更改为 for 循环只会使其在每次迭代时覆盖相同的 members.csv 文件,但我计划对其进行更改,以便它输出到唯一的文件中。
所以回到我的问题。我如何使这个单一程序迭代循环遍历所有组,或者只是 select 所有组。
感谢您的帮助!
无法测试这个,但也许是这样的?这将为每个组创建一个新的 .csv 文件。
for chat in chats:
try:
if chat.megagroup == True:
groups.append(chat)
except:
continue
for current_group in groups:
print(f"Fetching members for group \"{current_group.title}\"...")
all_participants = client.get_participants(current_group, aggressive=True)
current_file_name = f"members_{current_group.title}.csv"
print(f"Saving in file \"{current_file_name}\"...")
with open(current_file_name, "w+", encoding="UTF-8") as file:
writer = csv.writer(file, delimiter=",", lineterminator="\n")
writer.writerow(["username", "user id", "access hash", "name", "group", "group id"])
for user in all_participants:
username = user.username if user.username else ""
first_name = user.first_name.strip() if user.first_name else ""
last_name = user.last_name.strip() if user.last_name else ""
name = f"{first_name} {last_name}"
row = [username, user.id, user.access_hash, name, current_group.title, current_group.id]
writer.writerow(row)
print(f"Finished writing to file \"{current_file_name}\".")
print("Members scraped successfully.")
最终解决了问题:
关于命名CSV文件: 使用title属性命名文件并在字符串中替换。
g_index = chat_num
target_group=groups[int(g_index)]
filename = target_group.title
print('Fetching Members from {} ...'.format(filename))
all_participants = []
all_participants = client.get_participants(target_group, aggressive=True)
print('Saving In file...')
with open(("{}.csv".format(filename)),"w",encoding='UTF-8') as f:
关于为序列创建 for 循环: 原始代码(发布在问题中)不包含 for 循环。我的解决方法是从所有内容创建一个函数,然后遍历一个索引列表,该列表等于检测到的实例数量。最后看起来像这样:
chat_list_index = list(range(len(chats)))
for x in chat_list_index:
try:
get(x)
except:
print("No more groups.", end = " ")
pass
pass
print("Done")
总的来说,这可能不是实现我所寻求的目标的最佳解决方案,但它现在对我来说已经足够好了,而且我学到了很多东西。也许将来有人会发现这很有用。此处提供完整代码:(https://github.com/ivanstruk/telegram-member-scraper/).
干杯!
我终于掌握了 Python 的诀窍,并开始每天在工作中使用它。然而,学习曲线仍然很陡峭,我在尝试使用我发现 here 从电报频道中抓取成员的代码尝试新事物时遇到了障碍。
目前在第 38-44 行,我们可以 select 列表中的一个组,它将把用户数据抓取到 members.csv 中。
编辑:解决了 CSV 命名问题:
print('Saving In file...')
print(target_group.title)
filename = target_group.title
with open(("{}.csv".format(filename)),"w",encoding='UTF-8') as f:
我想创建一个 for 循环来遍历列表中的每个组,而不是依赖于输入。
print('Choose a group to scrape members from:')
i=0
for g in groups:
print(str(i) + '- ' + g.title)
i+=1
g_index = input("Enter a Number: ")
target_group=groups[int(g_index)]
问题是我不确定如何用for循环替换这部分代码。
尽管将其更改为 for 循环只会使其在每次迭代时覆盖相同的 members.csv 文件,但我计划对其进行更改,以便它输出到唯一的文件中。
所以回到我的问题。我如何使这个单一程序迭代循环遍历所有组,或者只是 select 所有组。
感谢您的帮助!
无法测试这个,但也许是这样的?这将为每个组创建一个新的 .csv 文件。
for chat in chats:
try:
if chat.megagroup == True:
groups.append(chat)
except:
continue
for current_group in groups:
print(f"Fetching members for group \"{current_group.title}\"...")
all_participants = client.get_participants(current_group, aggressive=True)
current_file_name = f"members_{current_group.title}.csv"
print(f"Saving in file \"{current_file_name}\"...")
with open(current_file_name, "w+", encoding="UTF-8") as file:
writer = csv.writer(file, delimiter=",", lineterminator="\n")
writer.writerow(["username", "user id", "access hash", "name", "group", "group id"])
for user in all_participants:
username = user.username if user.username else ""
first_name = user.first_name.strip() if user.first_name else ""
last_name = user.last_name.strip() if user.last_name else ""
name = f"{first_name} {last_name}"
row = [username, user.id, user.access_hash, name, current_group.title, current_group.id]
writer.writerow(row)
print(f"Finished writing to file \"{current_file_name}\".")
print("Members scraped successfully.")
最终解决了问题:
关于命名CSV文件: 使用title属性命名文件并在字符串中替换。
g_index = chat_num
target_group=groups[int(g_index)]
filename = target_group.title
print('Fetching Members from {} ...'.format(filename))
all_participants = []
all_participants = client.get_participants(target_group, aggressive=True)
print('Saving In file...')
with open(("{}.csv".format(filename)),"w",encoding='UTF-8') as f:
关于为序列创建 for 循环: 原始代码(发布在问题中)不包含 for 循环。我的解决方法是从所有内容创建一个函数,然后遍历一个索引列表,该列表等于检测到的实例数量。最后看起来像这样:
chat_list_index = list(range(len(chats)))
for x in chat_list_index:
try:
get(x)
except:
print("No more groups.", end = " ")
pass
pass
print("Done")
总的来说,这可能不是实现我所寻求的目标的最佳解决方案,但它现在对我来说已经足够好了,而且我学到了很多东西。也许将来有人会发现这很有用。此处提供完整代码:(https://github.com/ivanstruk/telegram-member-scraper/).
干杯!