正如标题所述,我正在尝试遍历.tsv文件目录,我想将分隔符从tab更改为“|”并将扩展名更改为.csv。当我从命令行运行它并传入文件路径,旧扩展和新扩展(例如“例如:convert.py C:/ Users / MyDir / files .tsv .csv”)时,我收到错误:“WindowsError: [错误2]系统找不到指定的文件“。
这是我目前的代码:
import csv
import sys
import os
if len(sys.argv) < 4:
sys.exit("Usage: convert_to_psv.py ~/dir .tsv .csv")
else:
cur_dir = (sys.argv[1])
old_ext = (sys.argv[2])
new_ext = (sys.argv[3])
print "here1"
files = os.listdir(cur_dir)
for filename in files:
file_ext = os.path.splitext(filename)[1]
if old_ext == file_ext:
newfile = filename.replace(old_ext, new_ext)
os.rename(filename, newfile)
csv.field_size_limit(sys.maxsize)
csv.writer(file(sys.argv[3], 'w+'), delimiter="|").writerows(csv.reader(open(sys.argv[2]), delimiter="\t"))
提前感谢您的帮助!
答案 0 :(得分:1)
您无法同时读取和写入同一文件;你要么必须将所有内容都读入内存,要么使用单独的输出文件。
最简单的方法是不重命名文件,而是写入新文件名,然后删除旧文件:
import csv
import sys
import os
if len(sys.argv) < 4:
sys.exit("Usage: convert_to_psv.py ~/dir .tsv .csv")
else:
cur_dir, old_ext, new_ext = sys.argv[1:]
for filename in os.listdir(cur_dir):
filename = os.path.join(cur_dir, filename)
base, file_ext = os.path.splitext(filename)
if file_ext == old_ext:
newfile = base + new_ext
csv.field_size_limit(sys.maxsize)
with open(filename, 'rb') as ifh, open(newfile, 'wb') as ofh:
reader = csv.reader(ifh, delimiter='\t')
csv.writer(ofh, delimiter='|').writerows(reader)
os.unlink(filename)
请注意,这不一定会创建具有相同权限的新文件。