csv 在Python中使用for循环将数据保存到txt文件

5f0d552i  于 2023-06-19  发布在  Python
关注(0)|答案(3)|浏览(158)

我正在尝试使用条件len(J[i+1])>=len(J[i])将数据保存到.txt文件。但我得到了一个错误。我该怎么解决?基本上,我希望代码只在满足条件时保存数据,而不是在其他情况下。选择性储蓄(如果存在这样的术语)。

File=1
import csv
for i in range(0,5):
    J=[0,1]*(i-1)
    print("J =",J)
    print("len J =",len(J))
    
    with open(rf"C:\Users\User\OneDrive - Technion\Research_Technion\Python_PNM\Surfactant A-D\12 nodes_New\{File}\Test.txt", 'a') as f: 
        writer = csv.writer(f)
        if (len(J[i+1])>=len(J[i])): 
            f.writelines('\n')
            f.write(str(J))

错误是

in <module>
    if (len(J[i+1])>=len(J[i])):

IndexError: list index out of range
flmtquvp

flmtquvp1#

J=[0,1]*(i-1)创建一个列表,如下所示:[0, 1, 0, 1, 0, 1]。你的代码稍后检查if (len(J[i+1])>=len(J[i])):,但是你的列表是平的,所以你不能得到那里的值的长度。(这将是一个未来的错误)
你得到错误的原因是i-1的第一个值是0,所以你创建了一个空的列表J=[0,1]*(i-1),那里没有值可以比较。试着把它乘以i

lf5gs5x2

lf5gs5x22#

试试用这样的方法

def save_data_to_txt(J):
    # Assuming J is a list of strings

    with open('output.txt', 'w') as file:
        # Iterate over the elements of J, except the last one
        for i in range(len(J) - 1):
            if len(J[i+1]) >= len(J[i]):
                # Write the current element to the file
                file.write(J[i] + '\n')

        # Write the last element of J unconditionally
        file.write(J[-1] + '\n')
kuhbmx9i

kuhbmx9i3#

这将抛出一个错误,因为你在这一行
if (len(J[i+1])>=len(J[i])):
你试图在循环的第五次迭代中访问j[5]。因为j[5]不存在,所以抛出一个错误。
尝试修改你的代码,这样它就不会尝试访问列表中不存在的元素。

相关问题