沧野 2023-05-27 10:01 采纳率: 80%
浏览 82
已结题

Python使用format方法输出字符串报错

python中字符串格式化输出出错

import re
import random
f=open('StrInts.txt','w')
for i in range(0,500):
    f.write(str(random.randint(-9999,9999))+'\t')
f.close()

f1=open('StrInts.txt','r')
data=f1.read()
f1.close()
print(data)

lst=re.findall('-?[0-9]+',data)
print(lst)
flag=int(0)
data_set=[]
for i in lst:
    ii=re.findall('\d+',i)
    # print(ii)
    # print(str(ii[0]))
    j=len(str(ii[0]))
    # print(j)
    num=str(ii[0])[::1]
    flag=1
    while j>0:
        if j%2==0:
            if int(num[len(str(ii[0]))-j])%2==0:
                flag=0
        j-=1
    if flag==1:
        data_set.append(i)
print(data_set)
with open('ResultInts.txt','w')as f2:
    count = 0
    for i in data_set:
        f.write("{:>8,s}".format(i))
        count+=1
        if count%3==0:
            f.write('\n')

出错代码:
line 36

    f.write("{:>8,s}".format(i))

报错信息:
ValueError: Cannot specify ',' with 's'.

  • 写回答

2条回答 默认 最新

  • 老王学长 2023-05-27 10:07
    关注
    
    import re
    import random
    
    f = open('StrInts.txt', 'w')
    for i in range(0, 500):
        f.write(str(random.randint(-9999, 9999)) + '\t')
    f.close()
    
    f1 = open('StrInts.txt', 'r')
    data = f1.read()
    f1.close()
    print(data)
    
    lst = re.findall('-?[0-9]+', data)
    print(lst)
    
    flag = 0
    data_set = []
    for i in lst:
        ii = re.findall('\d+', i)
        j = len(str(ii[0]))
        num = str(ii[0])[::1]
        flag = 1
        while j > 0:
            if j % 2 == 0:
                if int(num[len(str(ii[0])) - j]) % 2 == 0:
                    flag = 0
            j -= 1
        if flag == 1:
            data_set.append(i)
    print(data_set)
    
    with open('ResultInts.txt', 'w') as f2:
        count = 0
        for i in data_set:
            f2.write("{:>8s}".format(i))
            count += 1
            if count % 3 == 0:
                f2.write('\n')
    
    

    报错信息 ValueError: Cannot specify ',' with 's' 是由于在格式化字符串中使用了逗号和字符串格式化符号 's' 不兼容导致的。

    根据你的代码,你想要在写入文件时按照每行3个数据进行格式化输出,并使用逗号进行分隔。然而,你在格式化字符串中使用了逗号 ',',而 's' 是用于字符串格式化的符号,两者不兼容,因此引发了错误。

    要解决这个问题,你可以使用以下方法:

    with open('ResultInts.txt', 'w') as f2:
        count = 0
        for i in data_set:
            f2.write("{:>8s}".format(i))
            count += 1
            if count % 3 == 0:
                f2.write(', ')
            else:
                f2.write('\n')
    

    在上述代码中,我们将 f2.write(', ') 改为在每行的末尾添加逗号 ','。如果不是每行的末尾,就换行输出。

    这样修改后的代码应该可以解决你的问题,并按照每行3个数据进行格式化输出,并使用逗号进行分隔。请注意,在写入文件时要注意格式化字符串和符号的兼容性,确保使用正确的格式化符号。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月4日
  • 已采纳回答 5月27日
  • 修改了问题 5月27日
  • 创建了问题 5月27日

悬赏问题

  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别
  • ¥15 使用Ant Design Pro vue的时候,使用环境变量的时候,构建报错是什么原因