| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import csv
- import chardet
- def detect_encoding(file_path):
- with open(file_path, 'rb') as f:
- raw_data = f.read()
- result = chardet.detect(raw_data)
- return result['encoding']
- def read_csv(file_path):
- encodings_to_try = ['utf-8-sig', 'gb18030', 'shift_jis', 'euc-jp']
- detected_encoding = detect_encoding(file_path)
- print(f"Detected encoding: {detected_encoding}")
-
- # Add detected encoding to the front of the list
- if detected_encoding:
- encodings_to_try.insert(0, detected_encoding)
-
- for encoding in encodings_to_try:
- try:
- print(f"Trying encoding: {encoding}")
- with open(file_path, 'r', encoding=encoding) as f:
- reader = csv.reader(f)
- rows = list(reader)
- # Print first 5 rows
- for i, row in enumerate(rows[:5]):
- print(f"Row {i}: {row}")
- return rows
- except UnicodeDecodeError:
- print(f"Failed with encoding: {encoding}")
- continue
- except Exception as e:
- print(f"Error with encoding {encoding}: {e}")
- continue
-
- raise Exception("Failed to read file with all attempted encodings")
- if __name__ == "__main__":
- input_file = "测试.csv"
- print(f"Testing file: {input_file}")
- try:
- data = read_csv(input_file)
- print("\nFile read successfully!")
- except Exception as e:
- print(f"\nError reading file: {e}")
|