import os
import pandas as pd
# Path to the directory containing .xlsx files with 1951-1987 data
xlsx_dir = r'D:\气象数据\气象数据\1951-1987\气温\新疆'
# Path to the directory containing .txt files with 1988-2018 data
txt_dir = r'D:\气象数据\气象数据\1988-2018\气温\新疆气温'
# List all .xlsx files in the directory
xlsx_files = os.listdir(xlsx_dir)
# Iterate over each .xlsx file
for xlsx_filename in xlsx_files:
if xlsx_filename.endswith('.xlsx'):
full_xlsx_path = os.path.join(xlsx_dir, xlsx_filename)
station_name, _ = os.path.splitext(xlsx_filename) # Extract station name from filename
# Load .xlsx file
xlsx_data = pd.read_excel(full_xlsx_path)
# Find corresponding .txt file
txt_filename = os.path.join(txt_dir, f'{station_name}.txt')
# Check if corresponding .txt file exists
if os.path.exists(txt_filename):
# Load .txt file
txt_data = pd.read_csv(txt_filename, delimiter='\t', header=None)
# Set column names for txt_data to match xlsx_data
txt_data.columns = xlsx_data.columns
# Append txt_data to xlsx_data
merged_data = pd.concat([xlsx_data, txt_data], ignore_index=True)
# Write updated data back to .xlsx file
merged_data.to_excel(full_xlsx_path, index=False)
print(f"Data appended for station {station_name}")
else:
print(f"No corresponding .txt file found for station {station_name}")
当然,我很乐意帮你解释代码中每个函数的用法,并提供详细的例子来说明。我们逐个来看:
1. **import os**:
这一行导入了Python标准库中的os模块。os模块提供了许多与操作系统交互的函数,比如文件操作、路径操作等。在这个脚本中,它用于处理文件路径。
**例子**:
```python
import os
# 获取当前工作目录
current_directory = os.getcwd()
print("当前工作目录:", current_directory)
```
2. **import pandas as pd**:
这一行导入了Pandas库,并将其命名为pd。Pandas是Python中用于数据操作和分析的重要库。它提供了DataFrame等数据结构,以及各种数据操作和分析工具。
**例子**:
```python
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)
```
3. **xlsx_dir = r'D:\气象数据\气象数据\1951-1987\气温\新疆'**:
这一行定义了一个字符串变量xlsx_dir,其中存储了包含1951-1987年气温数据的.xlsx文件的目录路径。
4. **txt_dir = r'D:\气象数据\气象数据\1988-2018\气温\新疆气温'**:
这一行定义了一个字符串变量txt_dir,其中存储了包含1988-2018年气温数据的.txt文件的目录路径。
5. **xlsx_files = os.listdir(xlsx_dir)**:
这一行使用os.listdir()函数列出了xlsx_dir目录中所有文件的文件名,并将结果存储在xlsx_files变量中。
6. **for xlsx_filename in xlsx_files: ...**:
这是一个for循环,用于遍历xlsx_files中的每个文件名。
7. **if xlsx_filename.endswith('.xlsx'): ...**:
这一行使用字符串的.endswith()方法检查xlsx_filename是否以'.xlsx'结尾。如果是,则执行下面的代码块。
8. **full_xlsx_path = os.path.join(xlsx_dir, xlsx_filename)**:
这一行使用os.path.join()函数将xlsx_dir和xlsx_filename拼接成完整的文件路径,并将其存储在full_xlsx_path变量中。
9. **station_name, _ = os.path.splitext(xlsx_filename)**:
这一行使用os.path.splitext()函数将文件名xlsx_filename分割成文件名和扩展名,并将文件名部分存储在station_name变量中。扩展名部分由下划线(_)表示,因为在这个脚本中没有使用它。
10. **xlsx_data = pd.read_excel(full_xlsx_path)**:
这一行使用Pandas的pd.read_excel()函数读取full_xlsx_path指向的.xlsx文件,并将其加载到DataFrame中,存储在xlsx_data变量中。
11. **txt_filename = os.path.join(txt_dir, f'{station_name}.txt')**:
这一行构建了与当前.xlsx文件对应的.txt文件的完整路径,并将其存储在txt_filename变量中。
12. **if os.path.exists(txt_filename): ...**:
这一行使用os.path.exists()函数检查txt_filename指向的文件是否存在。如果存在,则执行下面的代码块。
13. **txt_data = pd.read_csv(txt_filename, delimiter='\t', header=None)**:
这一行使用Pandas的pd.read_csv()函数读取txt_filename指向的.txt文件,并将其加载到DataFrame中。delimiter参数指定了字段之间的分隔符(这里是制表符'\t'),header参数指定了是否将文件的第一行作为列名。由于这里传递的是None,所以不会将第一行作为列名。
14. **txt_data.columns = xlsx_data.columns**:
这一行将txt_data的列名设置为与xlsx_data相同的列名,以确保两个DataFrame具有相同的列结构。
15. **merged_data = pd.concat([xlsx_data, txt_data], ignore_index=True)**:
这一行使用Pandas的pd.concat()函数将xlsx_data和txt_data按行连接起来,ignore_index参数指定了是否忽略原始索引并使用新的连续索引。
16. **merged_data.to_excel(full_xlsx_path, index=False)**:
这一行将合并后的数据merged_data写入到之前读取的.xlsx文件中,并且不写入行索引。
17. **print(f"Data appended for station {station_name}")**:
这一行打印了一个信息,说明已经将数据追加到了相应的站点文件中。
18. **else: ...**:
如果在步骤12中检测到.txt文件不存在,则执行这个else代码块,打印一条未找到对应.txt文件的信息。
以上就是代码中每个函数的用法及其详细解释,希望对你有所帮助。