gpt4 book ai didi

python - 在 python 中迭代特定的 csv 行会输出一个空白文件

转载 作者:行者123 更新时间:2023-11-30 22:35:24 26 4
gpt4 key购买 nike

这里是 python newb - 我正在尝试格式化一组发送给我的非常粗略的 csv,以便我可以将它们放入一个漂亮的 postgres 表中进行查询和分析。为此,我首先使用 csv.writer 清理它们,以删除包含每个条目的空白行和双引号。我的代码如下所示:

import os
import csv
import glob
from itertools import islice

files = glob.glob('/Users/foo/bar/*.csv')

# Loop through all of the csv's
for file in files:
# Get the filename from the path
outfile = os.path.basename(file)

with open(file, 'rb') as inp, open('/Users/foo/baz/' + outfile, 'wb') as out:

reader = csv.reader(inp)
writer = csv.writer(out)
for row in reader:
if row:
writer.writerow(row)
out.close()

它工作得很好,并且完全符合我的要求。输出的 csv 看起来很棒。接下来,我尝试从新清理的 csv 文件的开头和结尾删除一定数量的包含完全不必要的垃圾的行(省略前 8 行和最后 2 行)。由于我确实无法确定的原因,这部分代码的 csv 输出(缩进与之前的“with” block 相同)完全是空的:

with open('/Users/foo/baz/' + outfile, 'rb') as inp2, open('/Users/foo/qux/' + outfile, 'wb') as out2:
writer2 = csv.writer(out2)
reader2 = csv.reader(inp2)
row_count = sum(1 for row in reader2)
last_line_index = row_count - 3
for row in islice(reader2, 7, last_line_index):
writer2.writerow(row)
out2.close()

我知道由于我的“with”用法,每个 block 末尾的 close() 是多余的 - 我在查看 here 后尝试将其作为一种方法。我还尝试将第二个“with” block 放入不同的文件中,并在运行第一个“with” block 后运行该文件,但仍然无济于事。非常感谢您的帮助!

此外,这是整个文件:

import os
import csv
import glob
from itertools import islice

files = glob.glob('/Users/foo/bar/*.csv')

# Loop through all of the csv's
for file in files:
# Get the filename from the path
outfile = os.path.basename(file)

with open(file, 'rb') as inp, open('/Users/foo/baz/' + outfile, 'wb') as out:

reader = csv.reader(inp)
writer = csv.writer(out)
for row in reader:
if row:
writer.writerow(row)
out.close()

with open('/Users/foo/baz/' + outfile, 'rb') as inp2, open('/Users/foo/qux/' + outfile, 'wb') as out2:
writer2 = csv.writer(out2)
reader2 = csv.reader(inp2)
row_count = sum(1 for row in reader2)
last_line_index = row_count - 3
for row in islice(reader2, 7, last_line_index):
writer2.writerow(row)
out2.close()

谢谢!

最佳答案

有罪的一方是

row_count = sum(1 for row in reader2)

它从reader2读取所有数据;现在,当您尝试 for row in islice(reader2, 7, last_line_index) 时,您不会获得任何数据。

此外,您可能会读取大量空白行,因为您以二进制方式打开文件;相反,做

with open('file.csv', newline='') as inf:
rd = csv.reader(inf)

关于python - 在 python 中迭代特定的 csv 行会输出一个空白文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44578786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com