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

时间:2011-10-26 22:11:43

标签: 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:
    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循环,但是我从SO用户那里得到了很多帮助来构建这个并且我真的不知道我需要把它弄得一团糟。

如果我太模糊或太需要,请告诉我。感谢您收到的所有帮助!

实施例<!/ P>

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

如您所见,它会根据output.txt中列出的所有值检查input.csv,以创建correct.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

如果没有从output.txt转移到correct.csv的缺失62的问题会怎样?

2 个答案:

答案 0 :(得分:1)

你给出的例子对我有用。我想知道你是否面临换行问题。不要在output.txt的每一行中剥离一个字符,而是尝试使用.strip()方法。也就是说,使用line[:-1]。而不是line.strip()

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

如果你仍然有问题,那么就开始输入很多印刷语句并告诉我们你看到了什么。 ;)

答案 1 :(得分:1)

我不明白 - 当我运行代码时,更正的.csv包含五行中的前四行(苹果,橙子,布鲁塞尔豆芽,西葫芦)。它也会编写最后一行(激情 - 果实),除了当你读取output.text时你正在删除留下“passion-frui”的最后一个字符,它与之不匹配。摆脱行中的[:-1]并使用strip:

lines.append(line.strip())

为什么你希望correct.csv只包含苹果,橙子和激情果实。