0

我有一个将 nc 文件的一部分转换为 csv 文件的脚本。脚本本身可以工作,但问题是我需要指定确切的目录,包括文件名和输出 csv。我有兴趣为文件夹 test1 中的所有 nc 文件运行脚本,并将其转换为文件夹 test2 中同名的 csv。我尝试修改脚本,但没有奏效。这是我的脚本。

import netCDF4
from netCDF4 import num2date, date2num, date2index
import pandas as pd
import numpy as np
import netCDF4
import sys
import os

path = r"C:\\Users\\chz08006\\Documents\\test1"

for filename in os.listdir(path):
    netcdf_file = r"C:\\Users\\chz08006\\Documents\\test1\\"+filename
    csv_file = r"C:\\Users\\chz08006\\Documents\\test2\\"+filename

    f = netCDF4.Dataset(netcdf_file)
    ssha = f.variables["ssha"]
    lon = f.variables['lon']
    lat = f.variables['lat']
    #time = f.variables['time']
    timedim = ssha.dimensions[0]
    times = f.variables[timedim]
    dates = num2date(times[:], times.units)

    dates = [date.strftime('%Y-%m-%d %H:%M:%S') for date in dates]
    lon_list= list(lon)
    lat_list = list(lat)
    ssha_list = list(ssha)
    lon_list = [x-360 if x>= 180 else x for x in lon_list]
    df = pd.DataFrame({'Time':dates,'Longitude':lon_list,'Latitude':lat_list,'SSHA':ssha_list})
    df.to_csv(csv_file)

我修改脚本的失败尝试是

path = r"C:\\Users\\chz08006\\Documents\\test1"

for filename in os.listdir(path):
    netcdf_file = r"C:\\Users\\chz08006\\Documents\\test1\\"+filename
    csv_file = r"C:\\Users\\chz08006\\Documents\\test2\\"+filename

以前,它本来是

netcdf_file = r"C:\\Users\\chz08006\\Documents\\test1\\example1.nc"
csv_file = r"C:\\Users\\chz08006\\Documents\\test2\\exampleresult.csv"

其中 example1 是 nc 文件名,exampleresult 是 csv 名称。

4

1 回答 1

0

您可以使用 glob 模块获取具有 .nc 扩展名的文件列表。

import glob

for netcdf_file in glob.glob(r'C:\Users\chz08006\Documents\test1\*.nc'):
    print(netcdf_file)

您可以使用 os.path.split 将文件路径拆分为父目录路径和文件名。

import glob
import os

for netcdf_file in glob.glob(r'C:\Users\chz08006\Documents\test1\*.nc'):
    directory, ncfilename = os.path.split(netcdf_file)
    print(directory)        # C:\Users\chz08006\Documents\test1
    print(ncfilename)       # *.nc

您可以使用 os.path.splitext 来拆分文件名和扩展名。

for netcdf_file in glob.glob(r'C:\Users\chz08006\Documents\test1\*.nc'):
    directory, ncfilename = os.path.split(netcdf_file)
    print(directory)        # C:\Users\chz08006\Documents\test1
    print(ncfilename)       # filename.nc

    name, ext = os.path.splitext(ncfilename)
    print(name)             # filename
    print(ext)              # nc

现在您可以构建 CSV 文件名,然后您可以使用 os.path.join 来构建 CSV 文件路径。

import glob
import os

csvparent = r"C:\Users\chz08006\Documents\test2"

for netcdf_file in glob.glob(r'C:\Users\link\test1\*.nc'):
    directory, ncfilename = os.path.split(netcdf_file)
    print(directory)        # C:\Users\chz08006\Documents\test1
    print(ncfilename)       # *.nc

    name, ext = os.path.splitext(ncfilename)
    print(name)             # filename
    print(ext)              # nc

    csvname = name + ".csv"
    csvpath = os.path.join(csvparent, csvname)
    print(csvpath)          # C:\Users\chz08006\Documents\test2\filename.csv

现在,变量 csvpath 包含您需要的内容。它是与 *.nc 文件同名但扩展名为 .csv 的 CSV 文件的路径,位于 test2 目录中。

我希望这是有帮助的。

于 2019-07-25T01:53:44.657 回答