我开始使用Python,我正在查看csv文件。
基本上我的情况是这样的:
我在csv中有坐标X,Y,Z。
X Y Z
1 1 1
2 2 2
3 3 3
我想通过并为所有Z值添加用户定义的偏移值,并使用编辑过的z值创建一个新文件。
这是我的代码到目前为止我认为是对的:
# list of lists we store all data in
allCoords = []
# get offset from user
offset = int(input("Enter an offset value: "))
# read all values into memory
with open('in.csv', 'r') as inFile: # input csv file
reader = csv.reader(inFile, delimiter=',')
for row in reader:
# do not add the first row to the list
if row[0] != "X":
# create a new coord list
coord = []
# get a row and put it into new list
coord.append(int(row[0]))
coord.append(int(row[1]))
coord.append(int(row[2]) + offset)
# add list to list of lists
allCoords.append(coord)
# write all values into new csv file
with open(in".out.csv", "w", newline="") as f:
writer = csv.writer(f)
firstRow = ['X', 'Y', 'Z']
allCoords.insert(0, firstRow)
writer.writerows(allCoords)
但现在变得困难了。我将如何浏览一堆csv文件(在同一位置),并为每个csv生成一个新文件。
我希望有类似的东西:“filename.csv”变成“filename_offset.csv”,使用原始文件名作为新文件名的启动器,在末尾附加“.offset”。
我想我需要使用“操作系统”。功能,但我不知道如何,所以任何解释将与代码一起受到高度赞赏! :)
对不起,如果我没有多大意义,请告诉我是否需要更清楚地解释。 :)
非常感谢! :)
答案 0 :(得分:2)
shutil.copy2(src, dst)¶
Similar to shutil.copy(), but metadata is copied as well
The glob module finds all the pathnames matching a specified pattern
according to the rules used by the Unix shell. No tilde expansion is
done, but *, ?, and character ranges expressed with [] will be correctly matched
import glob
from shutil import copy2
import shutil
files = glob.glob('cvs_DIR/*csv')
for file in files:
try:
# need to have full path of cvs_DIR
oldName = os.path.join(cvs_DIR, file)
newName = os.path.join(cvs_DIR, file[:4] + '_offset.csv')
copy2(oldName,newName)
except shutil.Error as e:
print('Error: {}'.format(e))
答案 1 :(得分:1)
for row in reader:
if row[0] == "X":
break
for row in reader:
coord = []
...
......而不是......
for row in reader:
if row[0] != "X":
coord = []
...
这会在第一行之后停止检查'X'
es。
它的工作原理是因为你没有使用真实的列表,而是使用自我消耗iterator,你可以停止并重启。