为什么这个涉及CSV文件的Python程序不重复?

为什么这个涉及CSV文件的Python程序不重复?,python,csv,Python,Csv,它工作得很好。。。曾经 想法是从一个文本文件中获取一个名称列表(每个名称位于一个新行上),并根据该行是否以文本名称开头创建一个新的CSV文件 以下是到目前为止我得到的信息: import csv lines = [] with open('output.txt','r') as f: for line in f.readlines(): lines.append(line[:-1]) with open('corrected.csv','w') as correct:

它工作得很好。。。曾经

想法是从一个文本文件中获取一个名称列表(每个名称位于一个新行上),并根据该行是否以文本名称开头创建一个新的CSV文件

以下是到目前为止我得到的信息:

import csv

lines = []
with open('output.txt','r') as f:
    for line in f.readlines():
        lines.append(line[:-1])

with open('corrected.csv','w') as correct:
    writer = csv.writer(correct, dialect = 'excel')
    with open('input.csv', 'r') as mycsv:
        reader = csv.reader(mycsv)
        for row in reader:
            if row[0] in lines:
                writer.writerow(row)
问题是它做了一次就退出了。我已经检查了数据,它正确且完美地将数据行附加到新的CSV文件中。。。但一天后就不会继续了。我已经玩过while循环,但是我从用户那里得到了很多帮助,所以我不知道我需要处理什么

如果我太含糊,或者太需要帮助,请一定要让我知道。感谢您所给予的一切帮助

榜样

output.txt
/category/apples
/category/oranges
/category/brussel-sprouts
/category/zuccini
/category/passion-fruit


input.csv
/category/apples, 500, 45%, 345
/category/oranges, 345, 54%, 432
/category/brussel-sprouts, 435, 45%, 456
/category/zuccini, 345, 43%, 345
/category/passion-fruit, 364, 23%, 475


corrected.csv
/category/apples, 500, 45%, 345
/category/oranges, 345 54%, 432
/category/passion-fruit, 364, 23%, 475
如您所见,它会将input.csv与output.txt中列出的所有值进行检查,以创建更正的.csv

下面是我得到的一个例子:

corrected.csv
/category/apples, 500, 45%, 345
此问题现已解决,但现在有一个新错误:

我现在有一个新问题。我制作了一个计数程序,可以做到这一点:

def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return (i + 1)
x = file_len("input.txt")
y = file_len("output.txt")
z = file_len("input.csv")
q = file_len("corrected.csv")
print ("input.txt: ", x)
print ("output.txt: ", y)
print ("input.csv: ", z)
print ("corrected.csv ", q)
user = input()
现在计数程序的结果是:

input.txt - 2858
output.txt - 383
input.csv - 2853
corrected.csv - 321

如何解释丢失的62不能从output.txt传输到corrected.csv的问题?

您给出的示例对我很有用。我想知道你是否面临一个新的问题。尝试
.strip()
方法,而不是在
output.txt的每行中去掉一个字符。也就是说,使用
line.strip()
代替
line[:-1]

如果仍然存在问题,请尝试在
'rb'
模式下打开
input.csv
,而不是只打开
'r'


如果你仍然有问题,那就开始写大量的书面陈述,告诉我们你看到了什么

我不明白-当我运行代码时,corrected.csv包含五行中的前四行(苹果、橙子、布鲁塞尔芽菜、西葫芦)。它也会写最后一行(西番莲果),但当你阅读output.text时,你会删除最后一个字符,留下不匹配的“西番莲果”。去掉排中的[:-1]并使用条带:

lines.append(line.strip())

为什么您希望corrected.csv只包含苹果、橙子和西番莲果实。

我认为最好能从input.csv和output.txt中获得一些示例数据,以及您希望程序输出的内容与您实际得到的内容。@waffleparadox当然!我真的很抱歉没有包括在内,我不确定是否需要。立即编辑。与您发布的更正后的.csv相比,您当前的输出有什么不正确之处?与我想要的不同,它只执行第一行而不是所有操作。对不起,我刚刚在中编辑了它!关于您最近的编辑(您缺少62个条目):您确定
output.txt
中的所有内容也在
input.csv
中吗?还有,什么是
input.txt
?现在它们没有链接。我在output.txt中有383个元素,但在output.csv文件中只有321个元素。。。成功了!(但不是全部)@Dave:如果你阅读了他最近关于这个问题的其他一些问题,你会发现他的选择器文件(
output.txt,在本例中为
)只有“预纠正”输入的一个子集。我想他已经做了很多实验,只是碰巧复制了这个问题的例子。但是非常感谢你的帮助!现在比以前好多了。