为了账号安全,请及时绑定邮箱和手机立即绑定

您如何为文本文件编号,但在再次计数之前还要重复每个数字 x 次?

您如何为文本文件编号,但在再次计数之前还要重复每个数字 x 次?

桃花长相依 2022-06-02 18:13:08
我有一个列表(list.txt),其中包含如下名称:James Heather Daniel Peter这份名单最多有 100 人,我的目标是给前 3 (x) 个“1”编号。接下来的 3 (x) '2'。等等。我设法给每个人编号,但数字按预期增加,没有重复。最好我想将列表打印到 Groups.txt 中以保持原始列表不变,以便我以后可以更改组的大小 (k)。我试图以某种方式将以下代码实现到以下代码中: res = list(itertools.chain.from_iterable(itertools.repeat(y, 3) for y in c))或者 res = [ele for ele in c for i in range(k)]但它没有用。f = open('list.txt', 'w')c = open('Groups.txt')x = 3for index, value in enumerate(c, 1):    f.write("{}.{}".format(index, value))f.close()这里又是我希望输出的内容:1.James1.希瑟1.丹尼尔1.彼得2.弗兰克2.山姆2.杰夫...ETC
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

f = open('list.txt', 'w')

c = open('test.txt')

lines = c.readlines()

counter = 0

for i in range(len(lines)):

    if i%3 == 0:

        counter+=1

    f.write("{}.{}".format(counter, lines[i]))

f.close()

这就是你想要的。它完全按照你说的那样工作。


查看完整回答
反对 回复 2022-06-02
?
精慕HU

TA贡献1845条经验 获得超8个赞

只需使用index // group_sizeas 键即可满足您的需求:


f = open('list.txt', 'w')

c = open('Groups.txt')

group_size = 3

for index, value in enumerate(f, group_size):

    f.write("{}.{}".format(index // group_size, value))

f.close()


查看完整回答
反对 回复 2022-06-02
?
倚天杖

TA贡献1828条经验 获得超3个赞

不是最直接的方法,但至少它有效:


string = 'James Heather Daniel Peter Frank Sam Jeff'

string_list = string.split() #Turn string into list

k = 3 #Group size

needed_numbers =range(int(np.ceil(len(string_list)/k))) #Divide len by k and round upwards

numbers_list = [y+1 for x in needed_numbers for y in (x,)*k] #Get list of numbers

print('\n'.join([f'{i}.{j}' for j,i in zip(string_list,numbers_list)])) #Join both

输出:


1.James

1.Heather

1.Daniel

2.Peter

2.Frank

2.Sam

3.Jeff

您可以将 print 函数中的内容保存到 txt 文件中:


with open('Groups.txt', 'w') as g:

    g.write('\n'.join([f'{i}.{j}' for j,i in zip(string_list,numbers_list)]))


查看完整回答
反对 回复 2022-06-02
  • 3 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信