python - 自动 Savetxt 为 CSV Python
问题描述
我有兴趣剪切数据集,然后按照名称模式自动保存它(例如:block1.csv,block2.csv ....)现在我正在手动进行,我的代码是:
import csv
import tkinter as tk
from tkinter import filedialog
import numpy as np
import pandas as pd
import geopandas as gpd
from geopandas import GeoSeries
from shapely.geometry import Polygon
from shapely.geometry import Point
root= tk.Tk()
canvas1 = tk.Canvas(root, width = 400, height = 400, bg = 'gray1', relief = 'raised')
canvas1.pack()
#--------------START---IMPORT-------------------
def getCSV ():
global df
import_file_path = filedialog.askopenfilename()
df = np.genfromtxt(import_file_path, delimiter='_', missing_values = ' ', filling_values = None)
print (df)
browseButton_CSV = tk.Button(text=" Import CSV File to clip ", command=getCSV, bg='OrangeRed4', fg='black', font=('helvetica', 12, 'bold'))
canvas1.create_window(200, 200, window=browseButton_CSV)
root.mainloop()
#--------------END---IMPORT------------------------------------
x, y, z, mag = df[:,0], df[:,1], df[:,2], df[:,3]
xmin, ymin = np.min(x), np.min(y)
xmax, ymax = np.max(x), np.max(y)
dtSeries = GeoSeries(map(Point, zip(x,y,z,mag)))
def clipping( x, y, z, mag, xc, yc):
df1 = pd.DataFrame({'X':x, 'Y':y, 'Z':z, 'MAG':mag})
df1['geometry'] = list(zip(df1['X'], df1['Y'], df1['Z']))
df1['geometry'] = df1['geometry'].apply(Point)
gdfMAGN = gpd.GeoDataFrame(df1, geometry='geometry')
x1, y1 = xc, yc
# ____________[90000m X 90000m] IS THE WINDOW DIMENSIONS______________
clipAr = Polygon([ (x1, y1), (x1, y1+90000), (x1 + 90000, y1 + 90000), (x1+90000, y1)])
pol = gpd.GeoDataFrame([1], geometry=[clipAr] )
res = gpd.clip(gdfMAGN, pol)
resCSV = np.array([res['X'],res['Y'],res['Z'],res['MAG']]).T
#---------------------START---SAVE---------------------
root= tk.Tk()
canvas1 = tk.Canvas(root, width = 300, height = 300, bg = 'gray1', relief = 'raised')
canvas1.pack()
def saveCSV ():
global df
export_file_path = filedialog.asksaveasfilename( defaultextension=".csv", filetypes=[("CSV files", '*.csv')])
np.savetxt(export_file_path, resCSV, delimiter='_')
browseButton_CSV = tk.Button(text=" Export filled CSV Data File ", command=saveCSV, bg='OrangeRed4', fg='black', font=('helvetica', 12, 'bold'))
canvas1.create_window(150, 150, window=browseButton_CSV)
root.mainloop()
#------------------------END---SAVE--------------------
xc, yc = np.min(x), np.min(y)
while True:
#---------45000m IS THE STEP -----------------------
if xc = np.max(x):
if yc = np.max(y):
clipping(x, y, z, mag, xc, yc)
break
else:
xc = xmin
yc = yc + 45000
else:
clipping(x, y, z, mag, xc, yc)
xc = xc + 45000
解决方案
为了使用遵循我演示的模式的名称自动保存结果,我添加了以下代码行并删除了 saveCSV()。我只保留了 np.savetxt(....)。有了它们,我得到一个路径作为输入,我从中删除最后一部分并得到文件路径。
#-------------------START---------GET PATH---------------------------
root= tk.Tk()
canvas1 = tk.Canvas(root, width = 300, height = 300, bg = 'gray1', relief = 'raised')
canvas1.pack()
def getPath ():
global path
path = filedialog.asksaveasfilename( defaultextension=".txt", filetypes=[("TXT files", '*.txt')])
print(path)
browseButton_CSV = tk.Button(text=" Set PATH ", command=getPath, bg='OrangeRed4', fg='black', font=('helvetica', 12, 'bold'))
canvas1.create_window(150, 150, window=browseButton_CSV)
root.mainloop()
#--------------------END-------GET PATH---------------------------------------------
print(path)
strin = np.array([])
for i in path:
strin=np.append(strin, i)
ind = np.where(strin=="/" )
j = str()
for i in path[0:(ind[0][len(ind[0])-1]+1)]:
j += i
path = j
print(path)
我还在 clipping() 中添加了 2 个额外的变量路径和块以及以下代码行来为每个 csv 创建路径和名称。
pathBlock = path + 'block' + str(bl) + '.csv'
np.savetxt(pathBlock, resCSV, delimiter='_')
推荐阅读
- redirect - 使用 Websphere Liberty OIDC 提供程序注销重定向
- sql - 在ssis的多个文件夹中解压多个文件
- python - 使用 Python3 在 Google App Engine 中编写应用程序日志?
- ios - 为什么 DetailViewController 使用 Tabbar 和 Navigation Controller 弹出到第一个 DetailViewController?
- elasticsearch - 在 Travis Xenial 构建主机上运行 Elasticsearch-7.0
- java - 口吃摇摆动画
- tensorflow - 张量流中的fast.ai等价物
- optimization - Fortran 与 MPI 文件写入/读取的性能
- closedxml - 将互操作转换为 ClosedXML
- html - 如何使用 grep 获取多个 HTML 标签的内容?