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'.


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个数据进行格式化输出,并使用逗号进行分隔。请注意,在写入文件时要注意格式化字符串和符号的兼容性,确保使用正确的格式化符号。

  • 你可以参考下这篇文章:Python异常 ValueError
  • 除此之外, 这篇博客: Python中常见错误中的 ValueError(值误差): 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • invalid literal for int() with base 10: 变量值    :  变量值无效

    too many values to unpack (expected 2) :   要解包的值太多,应该为 2

    not enough values to unpack (expected 2, got 1)   :值不足,无法解包,应该为 2 ,实际只给了 1